我需要写一个脚本,启动我的程序与不同的参数。我开始我的程序:
./MyProgram.exe Data/data1.txt [Logs/data1_Log.txt]。
下面是我想要做的伪代码:
for each filename in /Data do
for int i = 0, i = 3, i++
./MyProgram.exe Data/filename.txt Logs/filename_Log{i}.txt
end for
end for
我如何从第一个参数创建第二个参数,使它看起来像dataABCD_Log1.txt并启动我的程序?
首先需要注意的是:当您使用Data/data1.txt作为参数时,它真的应该是/Data/data1.txt(带有前导斜杠)吗?另外,外部循环应该只扫描.txt文件,还是/Data中的所有文件?下面是答案,假设只有/Data/data1.txt和.txt文件:
#!/bin/bash
for filename in /Data/*.txt; do
for ((i=0; i<=3; i++)); do
./MyProgram.exe "$filename" "Logs/$(basename "$filename" .txt)_Log$i.txt"
done
done
注:
/Data/*.txt扩展到/Data中的文本文件路径(包括/Data/ part)
$(…)运行shell命令并将其输出插入到命令行中
basename somepath .txt输出somepath的基本部分,从结尾删除。txt(例如/Data/file.txt ->文件)
如果你需要用Data/file.txt而不是/Data/file.txt运行MyProgram,使用"${filename#/}"来移除前面的斜杠。另一方面,如果你想扫描的是Data而不是/Data,只需在Data/*.txt中使用for文件名。