如何在bash脚本中正确循环?

时间:2011-12-05 18:57:42

标签: bash

我写了这个脚本,它取一个停止和开始数字,并计算出两者之间的数字 - 无论“停止”数字是否被重新调整,我都想让它继续增加,所以它一直在计数直到ctrl + z被按下但是它没有识别出我的while条件 - 有人可以为我纠正语法吗?

  #!/bin/sh

stopvalue=$1
startvalue=$2

if [ $# -ne 2  ]
then
   echo "Error - You must enter two numbers exactly - using default start value of 1"
#exit 0
fi

echo ${startvalue:=1}

while (test "$startvalue" -le "$stopvalue" ||  "$startvalue" -ge "$stopvalue")
do
       startvalue=$((startvalue+1))
        echo $startvalue
done

4 个答案:

答案 0 :(得分:7)

既然你有关于while循环的两个答案,我建议改为使用for循环:

for((i=$startvalue;i<=$stopvalue;++i)) do
   echo $i
done

答案 1 :(得分:3)

你的主要问题在于你的情况:

while (test "$startvalue" -le "$stopvalue" ||  "$startvalue" -ge "$stopvalue")

如果$startvalue是(小于或等于)或(大于或等于)$stopvalue,则告诉它继续。对于$startvalue$stopvalue的任何组合,该组合将小于,等于或大于另一个。{1}}和$startvalue。取出后半部分只有在$stopvalue小于或等于while [ "$startvalue" -le "$stopvalue ] 时才会继续。

你应该写下来:

{{1}}

答案 2 :(得分:3)

我使用简单的while循环程序。哪个适合我。根据我的理解,在传递while循环中的任何变量之前,我们必须声明它:

sum=0            
temp=1          
while [ $temp -ne 0 ]           
do              
echo "Enter number: OR 0 to Quit :"             
read temp          
sum=`expr $sum + $temp`          
done          
echo $sum        

答案 3 :(得分:0)

while [ "$startvalue" -le "$stopvalue" -o "$startvalue" -ge "$stopvalue" ]
do
       startvalue=$((startvalue+1))
       echo $startvalue
done