我正在尝试构建一个循环来检查文件夹中的文件,然后如果文件夹中存在文件则运行循环,并继续运行循环直到没有更多文件,但我遇到了标记错误,“意外标记'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
您认为我可能写错了什么吗?
答案1
假设 bash 在一个简单的变量赋值中,不执行通配符:
$ 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
是毫无意义的。