Bourne Shell For я в (seq) - PullRequest
       34

Bourne Shell For я в (seq)

9 голосов
/ 20 января 2010

Я хочу написать цикл в оболочке Bourne, который повторяет определенный набор чисел. Обычно я бы использовал seq:

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

Но, похоже, на этой коробке Solaris seq не существует. Кто-нибудь может помочь, предоставив другое решение для итерации списка чисел?

Ответы [ 5 ]

15 голосов
/ 20 января 2010

попробуй

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

В противном случае, если у вас недавно установлен Solaris, есть, по крайней мере, bash 3. например это дает диапазон от 1 до 10 и от 15 до 20

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

ИЛИ используйте такой инструмент, как nawk

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

ИЛИ даже цикл while

while [ "$s" -lt 10 ]; do s=`echo $s+1|bc`; echo $s; done
2 голосов
/ 20 января 2010

Вы можете эмулировать seq с dc:

Например:

seq 0 5 120

переписывается как:

dc -e '0 5 120  1+stsisb[pli+dlt>a]salblax'
1 голос
/ 20 января 2010

Еще один вариант с использованием bc:

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

Для оболочки Bourne вам, вероятно, придется использовать обратные пометки, но избегайте их, если можете:

for i in `echo "for (i=0;i<=3;i++) i"|bc`; do echo "$i"; done
0 голосов
/ 03 октября 2012
for i in `seq 1 5 20`; do echo $i; done

Результат:

5
10
15
20

$ man seq

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
0 голосов
/ 20 января 2010

Я считаю, что это работает, хотя и безобразно, как грех:

for i in `echo X \n Y \n Z ` ...
...