猛砸/ shell代码对变量

问题描述:

列表文件中运行命令,因此对于初学者,我有以下几点,主要工艺进出口运行猛砸/ 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

您显示的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