bash脚本来读取我的文件并执行命令

时间:2015-06-30 11:09:28

标签: bash

我有一个脚本,可以运行./analyze file.txt file.root log.txt file.txt是输入文件,其中包含可执行根文件及其路径,其他输出。我的问题是我有近30个输入文件,我不想每次都写下命令来运行代码。 Bash脚本会很好但我没有管理。它给出了一个错误。看到下面代码的示例,我尝试运行:

  #!/bin/bash

do

echo

./analyze runlist1.txt runlist1.root log1.txt

./analyze runlist2.txt runlist2.root log.txt

./analyze runlist3.txt runlist3.root log.txt

./analyze runlist4.txt runlist4.root res4.txt

done

我收到错误“语法错误附近意外令牌`do'”,任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

与评论中指出的其他人一样,do脱离上下文是语法错误(在forwhileuntil控件之后,它是一个有效的关键字语句)。

显然,输入文件名和相应的日志文件名之间没有系统映射,因此您需要一个维护此映射的脚本。这样的事情,然后:

while read suffix logfile; do
    ./analyze "runlist$suffix.txt" "runlist$suffix.root" "$logfile"
done <<'____HERE'
    1 log1.txt
    2 log.txt
    3 log.txt
    4 res4.txt
____HERE

这里的文档(<< 分隔符之间的东西和分隔符在一行上的东西)就像一个文本文件,除了它被嵌入为脚本的一部分。

答案 1 :(得分:0)

检查原始但修改后的版本。

  

!/斌/庆典

     

用于Brunsplit1.txt中的文件Brunsplit2.txt

     

DO

     

echo $ file

     

./分析Brunsplit1.txt runlist1.root res1.txt

     

./分析Brunsplit2.txt runlist2.root res2.txt

     

完成

感谢。

答案 2 :(得分:0)

当所有文件都被称为Brunsplit.txt时,以下内容将有所帮助

for file in Brunsplit*.txt; do
   tmp=${file%.txt}
   nr=${tmp#Brunsplit}
   ./analyze ${file} runlist${nr}.root res${nr}.txt
done

tmp和nr变量用特殊的语法填充,就像最后切断.txt和从一开始就切断Brunsplit。