我需要编写一个脚本,用不同的参数启动我的程序,但我是 Bash 新手。我开始我的程序:
./MyProgram.exe Data/data1.txt [Logs/data1_Log.txt].
./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 文件:
Data/data1.txt
/Data/data1.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
$( ... )
basename somepath .txt
/Data/file.txt
file
如果您需要使用Data/file.txt而不是运行 MyProgram /Data/file.txt,请使用"${filename#/}"删除前导斜杠。另一方面,如果您真的Data不想/Data扫描,只需使用for filename in Data/*.txt.
Data/file.txt
"${filename#/}"
Data
/Data
for filename in Data/*.txt