Относительно UNIX Shell Script - PullRequest
       7

Относительно UNIX Shell Script

0 голосов
/ 30 марта 2010

Если в папке нет файлов, приведенный ниже скрипт переходит в цикл for. Не уверен, что я могу изменить, чтобы он не шел внутри цикла. Также, когда нет файлов внутри каталога, статус выхода должен быть успешным. Скрипт Wrapper проверяет состояние завершения скрипта ниже

     FILESRAW ="/exp/test1/folder"  .
for fspec in "$FILESRAW"/* ; do
  echo "$fspec"
  if [[ -f ${fspec} ]] ; then
       ..... processing logic
  else
     ... processing logic
  fi
done

Ответы [ 4 ]

3 голосов
/ 30 марта 2010

при использовании bash,

Вы можете установить nullglob

shopt-s nullglob

если у вас есть скрытые файлы,

shopt -s dotglob

с ksh,

#!/bin/ksh
set -o noglob
for file in /path/*
do
  ....
done
0 голосов
/ 03 января 2019

если вы используете ksh, попробуйте поместить это перед циклом for, чтобы оно не входило в него. " set -noglob " Даже у меня есть та же проблема, но я смог решить ее, сделав это.

0 голосов
/ 30 марта 2010

Для выхода, если $ FILESRAW пуст:

[ $( ls "$FILESRAW" | wc -l ) -eq 0 ] && exit 0

Если этот тест предшествует циклу, он не позволит выполнению достичь цикла for, если $ FILESRAW пусто.

Когда $ FILESRAW пусто, «$ FILESRAW» / * расширяется до «/ exp / test1 / folder / *», как указывает ghostdog74, вы можете изменить это поведение, установив nullglob с

shopt -s nullglob

Если вы хотите скрытые файлы, также установите dotglob:

shopt -s dotglob

Кроме того, вы могли бы использовать ls вместо globing. Это дает преимущество работы с очень полными каталогами (при использовании канала вы не достигнете максимального предела аргументов):

ls "$FILESRAW" | while read file; do
     echo "$file"

Это становится более грязным, если вы хотите скрытые файлы, так как вам нужно исключить. и .. чтобы подражать поведению globing:

ls -a "$FILESRAW" | egrep -v '^(\.|\.\.)$' | while read file; do
    echo "$file"
0 голосов
/ 30 марта 2010
for fspec in `dir $FILESRAW` ; do
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...