I need to write a script that starts my program with different arguments, but I'm new to Bash. I start my program with:
./MyProgram.exe Data/data1.txt [Logs/data1_Log.txt]
.
Here is the pseudocode for what I want to do:
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
So I'm really puzzled how to create second argument from the first one, so it looks like dataABCD_Log1.txt and start my program.
Best Answer
A couple of notes first: when you use
Data/data1.txt
as an argument, should it really be/Data/data1.txt
(with a leading slash)? Also, should the outer loop scan only for .txt files, or all files in /Data? Here's an answer, assuming/Data/data1.txt
and .txt files only:Notes:
/Data/*.txt
expands to the paths of the text files in /Data (including the /Data/ part)$( ... )
runs a shell command and inserts its output at that point in the command linebasename somepath .txt
outputs the base part of somepath, with .txt removed from the end (e.g./Data/file.txt
->file
)If you needed to run MyProgram with
Data/file.txt
instead of/Data/file.txt
, use"${filename#/}"
to remove the leading slash. On the other hand, if it's reallyData
not/Data
you want to scan, just usefor filename in Data/*.txt
.