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

fro*_*odo 2 bash

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

  #!/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
Run Code Online (Sandbox Code Playgroud)

Mic*_*ker 7

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

for((i=$startvalue;i<=$stopvalue;++i)) do
   echo $i
done
Run Code Online (Sandbox Code Playgroud)


Kev*_*vin 5

您的主要问题在于您的状况:

while (test "$startvalue" -le "$stopvalue" ||  "$startvalue" -ge "$stopvalue")
Run Code Online (Sandbox Code Playgroud)

$startvalue如果is (小于或等于) 或 (大于或等于) 则告诉它继续$stopvalue$startvalue对于和的任何组合$stopvalue,其中一个将小于、等于或大于另一个。删除第二个条件,使其仅在$startvalue小于或等于 时才继续$stopvalue

你应该这样写:

while [ "$startvalue" -le "$stopvalue" ]
Run Code Online (Sandbox Code Playgroud)


小智 5

我使用简单的 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        
Run Code Online (Sandbox Code Playgroud)


And*_*ark 0

while [ "$startvalue" -le "$stopvalue" -o "$startvalue" -ge "$stopvalue" ]
do
       startvalue=$((startvalue+1))
       echo $startvalue
done
Run Code Online (Sandbox Code Playgroud)