問題

我需要編寫一個指令碼,用不同的引數啟動我的程式,但我是Bash的新手.我開始我的程式:

./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 – > file)

如果您需要使用Data/file.txt而不是/Data/file.txt執行MyProgram,則使用"${filename#/}"刪除主斜槓.另一方面,如果它真的是Data而不是/Data您想要掃描,只需使用for filename in Data/*.txt.

  相同標籤的其他問題

bashfor-loopfilenamesglob