Запуск цикла do

Я пытаюсь создать цикл для проверки файлов в папке, затем запустить цикл, если в папке есть файлы, и продолжать цикл до тех пор, пока не останется больше файлов, но я сталкиваюсь с ошибкой токена, синтаксис ошибка рядом с неожиданным токеном `do '. Вот сценарий, который я пытаюсь запустить.

files=/satellite/MSGVIS6/* 
if [ "${#files[@]}" -gt 0 ]; then
do
    mcenv << 'EOF'
    imgcopy.k MSGVI6D MSGVI6I BAND=1 SIZE=SAME
    imgremap.k MSGVI6I MSGVI6I.2 SIZE=ALL PRO=MERC RES=3.00
    imgcha.k MSGVI6I.2 STYPE=GVAR
    imgdel.k MSGVI6I.1
    exit
    EOF
    find /satellite/awips/ -type f -name 'AREA6022*' -exec mv '{}' /awips2/edex/data/manual/ \;
    rm -rf "$files"
    done

else
echo ''
echo "No files downloaded. New area files will not be created."
fi 

exit 0

Есть мысли о том, что я могу писать неправильно?

0
задан 16 June 2016 в 06:54

1 ответ

Принимая удар, в присвоении простой переменной, globbing не выполняется:

$ a=*
$ echo "$a"
*

Для получения массива необходимо использовать круглые скобки:

a=(*)

Например, в /usr:

$ a=(*)
$ echo "$a" "${a[@]}"
bin bin include lib lib32 lib64 local sbin share src

Так, Ваша первая строка должна на самом деле читать:

files=(/satellite/MSGVIS6/*) 

Расшириться до всех элементов в массиве a, использовать "${a[@]}":

rm -rf "${files[@]}"

Другие примечания:

  • Можно использовать mv -t сделать find более эффективный с {} +:

    find /satellite/awips/ -type f -name 'AREA6022*' -exec mv -t /awips2/edex/data/manual/ {} +
    
  • Просто используйте echo вместо echo '':

    echo
    echo "No files downloaded. New area files will not be created."
    
  • exit 0 бессмысленно.
1
ответ дан 16 June 2016 в 06:54

Другие вопросы по тегам:

Похожие вопросы: