J'ai un programme, prog
, qui prend un argument entier lorsque je l'appelle depuis le terminal, par exemple :
./prog 10
Je voudrais exécuter prog
avec une plage de valeurs, par ex. 10, 20, 30, ...
. Existe-t-il un moyen astucieux de le faire, en plus d'utiliser :
./prog 10 ; ./prog 20 ; ./prog 30 ; ....
Réponse acceptée :
Vous pouvez utiliser une boucle for simple avec Bash, Zsh ou Ksh93.
Ce qui suit ne fonctionne que depuis la version 4 de Bash (2009), zsh 4.3.10 (2010) et ksh93r (2006) (bien que le {x..y}
la syntaxe provient de zsh
(en 2.6-beta4
en 1995)).
#!/bin/bash
# since Bash v4
for i in {10..100..10}
do
$path_of_prog/prog $i
done
Le {$start..$end..$step}
partie dit que $i
est au départ égal à $start
et $i
ira à $end
.
L'$step
est le montant avec lequel $i
sera augmentée à chaque étape.
Nous obtenons donc les valeurs 10 20 30 ... 100
pour $i
.
Vous pouvez également tout écrire sur une seule ligne avec
for i in {10..100..10}; do ./prog $i; done
Si vous avez un ancien Bash et GNU seq
est disponible, utilisez les lignes suivantes
#!/bin/bash
#only for pre Bash v4
for i in $(seq 10 10 100)
do
$path_of_prog/prog $i
done
ou en une seule ligne
for i in $(seq 10 10 100);do ./prog $i; done
(ce qui précède suppose que vous n'avez pas modifié le $IFS
variable).