Domanda

Voglio scrivere un ciclo in shell Bourne, che itera uno specifico insieme di numeri. Normalmente avrei usato seq:

for i in `seq 1 10 15 20`
   #do stuff
loop

Ma apparentemente su questa casella di Solaris seq non esiste. Chiunque può aiutare, fornendo un'altra soluzione per l'iterazione un elenco di numeri?

È stato utile?

Soluzione

try

for i in 1 10 15 20
do
   echo "do something with $i"
done

altra cosa se si dispone di recente Solaris, v'è bash 3 almeno. per esempio, questo indica intervallo da 1 a 10 e da 15 a 20

for i in {1..10} {15..20}
do
  echo "$i"
done

o utilizzare come strumento di nawk

for i in `nawk 'BEGIN{ for(i=1;i<=10;i++) print i}'`
do
  echo $i
done

o anche il ciclo while

while [ "$s" -lt 10 ]; do s=`echo $s+1|bc`; echo $s; done

Altri suggerimenti

È possibile emulare seq con dc:

Per esempio:

seq 0 5 120

viene riscritto come:

dc -e '0 5 120  1+stsisb[pli+dlt>a]salblax'

Un'altra variazione usando bc:

for i in $(echo "for (i=0;i<=3;i++) i"|bc); do echo "$i"; done

Per la shell Bourne, probabilmente dovrete usare backticks, ma evitare, se è possibile:

for i in `echo "for (i=0;i<=3;i++) i"|bc`; do echo "$i"; done

Trovo che questo funziona, anche se brutto come il peccato:

for i in `echo X \n Y \n Z ` ...
for i in `seq 1 5 20`; do echo $i; done

Risultato:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top