我有以下for循環在我寫的小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)?
我不是在尋找像「給我代碼」這樣的答案,我想知道是否有其他人看到類似的東西(循環行爲不當)或錯誤檢查指導。
'名稱= $(回聲類型_ $ {名稱})'被更有效地寫入'名=類型_ $ {名稱}'。 – chepner 2014-10-10 13:50:18
我也推薦'name = $ {file ## * MYSQLIST_}'和'name = $ {name%.zip}'而不是使用'awk'來處理文件名。 – chepner 2014-10-10 13:55:00