Tengo un programa, prog
, que toma un argumento entero cuando lo llamo desde la terminal, por ejemplo:
./prog 10
Me gustaría ejecutar prog
con un rango de valores, p. 10, 20, 30, ...
. ¿Hay alguna manera ordenada de hacerlo, además de usar:
./prog 10 ; ./prog 20 ; ./prog 30 ; ....
Respuesta aceptada:
Puede usar un bucle for simple con Bash, Zsh o Ksh93.
Lo siguiente solo funciona desde Bash versión 4 (2009), zsh 4.3.10 (2010) y ksh93r (2006) (aunque el {x..y}
sintaxis originada en 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
El {$start..$end..$step}
parte dice que $i
es al principio igual a $start
y $i
irá a $end
.
El $step
es la cantidad con la que $i
se incrementará en cada paso.
Entonces obtenemos los valores 10 20 30 ... 100
para $i
.
También puedes escribirlo todo en una línea con
for i in {10..100..10}; do ./prog $i; done
Si tiene un Bash anterior y GNU seq
está disponible, use las siguientes líneas
#!/bin/bash
#only for pre Bash v4
for i in $(seq 10 10 100)
do
$path_of_prog/prog $i
done
o como una sola línea
for i in $(seq 10 10 100);do ./prog $i; done
(lo anterior asume que no has modificado el $IFS
variables).