我想在Bourne shell中编写一个循环,它循环一组特定的数字。通常我会使用seq
:
for i in `seq 1 10 15 20`
#do stuff
loop
但似乎在这个Solaris框seq
上不存在。任何人都可以通过提供另一种迭代数字列表的解决方案来帮助吗?
答案 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