2015-06-04 3 views
0

У меня есть следующий сценарий оболочки. Что вызывает следующую ошибку, если в папке нет файла. Итак, как мы справляемся с этим, чтобы скрипт не прекращал выполнение?Обработка ошибок в скрипте оболочки

Ошибка:

mv: cannot stat `*': No such file or directory 

Сценарий:

for file in * 
    do 
     fl=$(basename "$file")    
     flname="${fl%%.*}"    
     gunzip "$file" 
     mv "$flname" "$flname-NxDWeb2" 
     tar -zcf "$flname-NxDWeb2".tar.gz "$flname-NxDWeb2" 
     rm "$flname-NxDWeb2" 
done; 

ответ

2

Если оболочка bash, вы можете позволить * расширить до нулевой строки: shopt -s nullglob до вашего цикла.

Кстати, вам может потребоваться явно указать несжатое имя файла для создания, если ваша логика не полностью согласна с gunzip (что, вероятно, не будет, если в имени более одной точки, или файл заканчивается .tgz или .taz):

gunzip -c "$file" >"$flname" 

(вам нужно будет удалить оригинал самостоятельно в этом случае, хотя)

вы можете избежать необходимости двигаться, тоже:

flname="${fl%%.*}-NxDWeb2" 

И вы можете использовать trap, чтобы гарантировать, что ваши временные файлы очищены в случае сбоя (возможно, сделайте ваши временные файлы в $TMPDIR).

Смежные вопросы