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).