使用seq
很好,因为它有一些默认值step
和end
值。if
如果只给出一个或两个参数,我将其添加到。如果给定的参数不是数字(默认值为 0),它也会处理这种情况。step
如果为零,也可能会遇到无限循环。如果您删除此检查,它将以与seq
版本相同的方式工作。
if [ $# -gt 0 ] ; then
x=$(($1+0))
end=$((${3:-$x}+0))
step=$((${2:-1}+0))
[ $step -eq 0 ] && echo "Step is zero!" && exit 1
while [ $x -le $end -a $step -gt 0 -o $x -ge $end -a $step -lt 0 ]; do
echo $x
x=$((x+step))
done
else
echo Enter at least one number on the command line.
fi
如果您想使用,请在 while 循环中echo
更改!number
例子:
$ ./e.sh 1
1
$ seq 1
1
$ ./e.sh 1 1 3
1
2
3
$ seq 1 1 3
1
2
3
$ ./e.sh 1 -1 3
$ seq 1 -1 3
$ ./e.sh 3 -1 1
3
2
1
$ seq 3 -1 1
3
2
1
$ ./e.sh 1 0 1
Step is zero!
$ seq 1 0 1|head
1
1
1
... (endlessly)
$ ./e.sh 1 .1 1.2
./e.sh: line 3: 1.2+0: syntax error: invalid arithmetic operator (error token is ".2+0")
$ seq 1 .1 1.2
1.0
1.1
1.2
Bash 算法不适用于浮点数,但seq
可以。如果您需要此功能,您可以使用该x=$(echo $x + $step|bc)
格式。也$((...))
应该用$(...|bc)
类似的行代替。