Bourne Shell for i in (SEC)
Pregunta
I quiere escribir un bucle en Bourne shell que itera un conjunto específico de números. Normalmente me gustaría utilizar seq
:
for i in `seq 1 10 15 20`
#do stuff
loop
Sin embargo, al parecer en este cuadro de seq
Solaris no existe. ¿Alguien puede ayudar proporcionando otra solución que se repite una lista de números?
Solución
try
for i in 1 10 15 20
do
echo "do something with $i"
done
otra cosa si tiene reciente de Solaris, no hay fiesta de al menos 3. por ejemplo este rango de dar de 1 a 10 y 15 a 20
for i in {1..10} {15..20}
do
echo "$i"
done
O el uso de herramientas como nawk
for i in `nawk 'BEGIN{ for(i=1;i<=10;i++) print i}'`
do
echo $i
done
o incluso el bucle while
while [ "$s" -lt 10 ]; do s=`echo $s+1|bc`; echo $s; done
Otros consejos
Se puede emular seq
con dc
:
Por ejemplo:
seq 0 5 120
se reescribe como:
dc -e '0 5 120 1+stsisb[pli+dlt>a]salblax'
Otra variación usando bc
:
for i in $(echo "for (i=0;i<=3;i++) i"|bc); do echo "$i"; done
Para el shell Bourne, es probable que tenga que usar acentos abiertos, pero evitarlos si es posible:
for i in `echo "for (i=0;i<=3;i++) i"|bc`; do echo "$i"; done
Me parece que esto funciona, aunque sea feo como el pecado:
for i in `echo X \n Y \n Z ` ...
for i in `seq 1 5 20`; do echo $i; done
Resultados:
5
10
15
20
$ man ss
SEQ(1) User Commands SEQ(1)
NAME
seq - print a sequence of numbers
SYNOPSIS
seq [OPTION]... LAST
seq [OPTION]... FIRST LAST
seq [OPTION]... FIRST INCREMENT LAST