我正在试图找出如何将以下for循环转换为while循环或直到循环包括如果for for UNIX这里是代码......
#!/bin/bash
if [ $# -gt 0 ] ; then
start=$1
end=$3
step=$2
for x in `seq $start $step $end` ; do
number $x
done
else
echo Enter at least one number on the command line.
fi
非常感谢任何帮助!
答案 0 :(得分:1)
(( x = start ))
until (( x > end ))
do
number $x
(( x += step ))
done
答案 1 :(得分:0)
对于这样的循环,最简单的方法是使用数字样式的for
循环:
for ((x=start; x<=end; x+=step)); do
number $x
done
答案 2 :(得分:0)
使用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)
之类的行。
答案 3 :(得分:0)
在Bash 4中你也可以这样做:
for i in {$start..$stop..$step}; do
echo $i
done