Я пытаюсь создать цикл для проверки файлов в папке, затем запустить цикл, если в папке есть файлы, и продолжать цикл до тех пор, пока не останется больше файлов, но я сталкиваюсь с ошибкой токена, синтаксис ошибка рядом с неожиданным токеном `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
Есть мысли о том, что я могу писать неправильно?
Принимая удар, в присвоении простой переменной, 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
бессмысленно.