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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top