我在我写的一个小shell脚本中有以下for循环。
for file in /home/place/incoming/MYSQLIST_*.zip
do
name=`echo $file|awk -F "MYSQLIST_" {'print$2'}` #get type
name=`echo $name|awk -F ".zip" {'print$1'}` #remove extension
unzip -Co ${file} -d /home/place/incoming/
name=`echo type_${name}`
echo $name >> collect.txt
directory=`echo /home/place/incoming/${name}.csv`
echo $directory >> collect.txt
#cleanup
rm ${name}.csv
rm phpvars.txt
mv ${file} ${file}.DONE
done
echo Done
此脚本大部分时间都按预期工作。我有到达此目录的文件,格式为MYSQLIST _ ####。zip和MYSQL _ ########。zip正如我们所期望的那样,这个脚本应该忽略名为MYSQL的文件_ ## ######。压缩。我注意到这个for循环已经提取了整个名称MYSQL _ ########。zip并将其写入collect.txt。
通常我的collect.txt会包含以下内容:
type_21345
/home/place/incoming/type_12345.csv
然而在少数情况下,这是在collect.txt中找到的:
MYSQL_12345678
/home/place/incoming/MYSQL_12345678.csv
我可能在for循环之前错过了一个catch,或者我应该在循环中找到一个,以检查文件的名称是否真的应该是什么(MYSQLIST _ * .ZIP)?
我不是在寻找像“给我代码”这样的答案,我想知道是否有其他人看到类似的东西(循环行为不端)或错误检查的指导。
答案 0 :(得分:0)
如果文件名中有空格或元字符,您可能希望在变量周围加上引号。即。
name=`echo $name ....`
应该是
name=`echo "$name" ....`
等