異なる引数でプログラムを開始するスクリプトを作成する必要があります。次のようにプログラムを開始します。
./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
最初の引数から 2 番目の引数を作成して、 dataABCD_Log1.txtのようにし、プログラムを起動するにはどうすればよいでしょうか?
ベストアンサー1
まず、いくつか注意点があります。Data/data1.txt
を引数として使用する場合、本当に (先頭にスラッシュを付けて) とすべきでしょうか? また、外側のループは .txt ファイルのみをスキャンすべきでしょうか、それとも /Data 内のすべてのファイルをスキャンすべきでしょうか? .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
/Data 内のテキスト ファイルのパスに展開されます ( /Data/ 部分を含む)$( ... )
シェルコマンドを実行し、その出力をコマンドラインのその位置に挿入します。basename somepath .txt
末尾の .txt を削除した somepath のベース部分を出力します (例:/Data/file.txt
->file
)
Data/file.txt
の代わりに MyProgram を実行する必要がある場合は/Data/file.txt
、 を使用して"${filename#/}"
先頭のスラッシュを削除します。一方、スキャンしたくないData
場合は、 を使用します。/Data
for filename in Data/*.txt