Ich habe ein Programm, prog
, das ein ganzzahliges Argument akzeptiert, wenn ich es vom Terminal aus aufrufe, z. B.:
./prog 10
Ich möchte prog
ausführen mit einem Wertebereich, z. 10, 20, 30, ...
. Gibt es eine nette Möglichkeit, dies zu tun, außer mit:
./prog 10 ; ./prog 20 ; ./prog 30 ; ....
Akzeptierte Antwort:
Sie können eine einfache for-Schleife mit Bash, Zsh oder Ksh93 verwenden.
Folgendes funktioniert nur seit Bash Version 4 (2009), zsh 4.3.10 (2010) und ksh93r (2006) (obwohl der {x..y}
Syntax stammt aus zsh
(in 2.6-beta4
1995)).
#!/bin/bash
# since Bash v4
for i in {10..100..10}
do
$path_of_prog/prog $i
done
Der {$start..$end..$step}
Teil sagt, dass $i
ist am Anfang gleich $start
und $i
geht zu $end
.
Der $step
ist der Betrag, mit dem $i
wird Schritt für Schritt erhöht.
So erhalten wir die Werte 10 20 30 ... 100
für $i
.
Sie können auch alles in einer Zeile mit
schreibenfor i in {10..100..10}; do ./prog $i; done
Wenn Sie eine ältere Bash und GNU seq
haben verfügbar ist, verwenden Sie die folgenden Zeilen
#!/bin/bash
#only for pre Bash v4
for i in $(seq 10 10 100)
do
$path_of_prog/prog $i
done
oder als Einzeiler
for i in $(seq 10 10 100);do ./prog $i; done
(Das Obige setzt voraus, dass Sie $IFS
nicht geändert haben Variable).