我有一个脚本,可以运行./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'”,任何帮助将不胜感激。
答案 0 :(得分:0)
与评论中指出的其他人一样,do
脱离上下文是语法错误(在for
,while
和until
控件之后,它是一个有效的关键字语句)。
显然,输入文件名和相应的日志文件名之间没有系统映射,因此您需要一个维护此映射的脚本。这样的事情,然后:
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。