Bourne Shell For i in(seq)

时间:2010-01-20 15:12:16

标签: shell scripting loops sh

我想在Bourne shell中编写一个循环,它循环一组特定的数字。通常我会使用seq

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

但似乎在这个Solaris框seq上不存在。任何人都可以通过提供另一种迭代数字列表的解决方案来帮助吗?

6 个答案:

答案 0 :(得分:15)

尝试

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

答案 1 :(得分:2)

您可以使用seq

模仿dc

例如:

seq 0 5 120

被重写为:

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

答案 2 :(得分:1)

使用bc的另一种变体:

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

对于Bourne shell,您可能不得不使用反引号,但如果可以,请避免使用反斜杠:

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

答案 3 :(得分:1)

#!/bin/sh
for i in $(seq 1 10); do
        echo $i
done

答案 4 :(得分:0)

我发现这是有效的,虽然像罪一样丑陋:

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

答案 5 :(得分:-4)

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