2017-03-02 95 views
0

列表文件中運行命令,因此對於初學者,我有以下幾點,主要工藝進出口運行猛砸/ shell代碼對變量

for fname in (filename); do 
    ./$comma "$fname" (var1) (var2) 
    mv "$fname" "${fname}.fin" 
done 

的話,我有名字的listfile中看起來像:

filename|var1|var2 
file1|9|1 
file2|8|3 

etc ...

想要將它設置在哪裏 - 當主腳本運行./$comma腳本時,它從列表文件中讀取並填充fname,var1和var2(按管道順序) - 現在我有一個很多像上面這樣重複的腳本塊,並且想鞏固或清理它。任何幫助表示讚賞 - 並不一定必須是for; do循環 - 只要腳本在正確的文件上運行並具有正確的參數並被重命名。

+0

[不讀線,供](http://mywiki.wooledge.org/DontReadLinesWithFor) –

+0

感謝您此鏈接 - 絕對有用的前進! – Jazzkatt

回答

2

您顯示的for循環在語法上不正確。你想要一個while循環,但是,它使用read命令。

while IFS="|" read -r fname var1 var2; do 
    ./"$comma" "$fname" "$var1" "$var2" 
    mv "$fname" "$fname.fin" 
done < filenames.txt 
+0

非常感謝你,我確實明白它不是語法上正確的閱讀文件,而是更快速的修復,變成了腳本的frankenstein。 – Jazzkatt

+0

我確實想問一下 - 這是否會在filenames.txt中的每一行始終運行?還是會「跳過」那些運行時不存在的文件? 'cd「$ ftf」' 'while IFS =「|」讀-r fname var1 var2;做 echo「正在處理逗號MFIX:$ fname」>>「$ logfile」 ./"$comma「」$ fname「」$ var1「」$ var2「 mv」$ fname「」$ fname.fin「 done Jazzkatt