frodo
frodo

Reputation: 1063

How to while loop correctly in bash script?

I have wrote this script which takes a stop and start number and counts out the numbers in between - I am yting to get it to keep increasing no matter whether the "stop" number is reaced or not so it keeps counting until ctrl+z is pressed but it is not recognising the while condition for me - could anyone correct the syntax for me please ?

  #!/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

Upvotes: 9

Views: 64532

Answers (5)

Ifeanyi
Ifeanyi

Reputation: 1

startvalue=50
stopvalue=0
while [ $startvalue -lt  $stopvalue -o $startvalue -ne $stopvalue ]; do
echo "Enter number equal to the start value: :"             
read stopvalue
done

Upvotes: -2

Kevin
Kevin

Reputation: 56129

Your main problem is in your condition:

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

You are telling it to continue if $startvalue is (less than or equal to) or (greater than or equal to) $stopvalue. For ANY combination of $startvalue and $stopvalue, the one will be less than, equal to, or greater than the other. Take out the second condition so that it only continues if $startvalue is less than or equal to $stopvalue.

And you should write it:

while [ "$startvalue" -le "$stopvalue" ]

Upvotes: 5

Tarun Sharma
Tarun Sharma

Reputation: 51

I use the simple while loop program. Which works for me. as per my understanding before passing any variable in while loop we have to declare it:

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        

Upvotes: 5

Michael Krelin - hacker
Michael Krelin - hacker

Reputation: 143259

Now that you have two answers about the while loop, I'll suggest using for loop instead:

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

Upvotes: 14

Andrew Clark
Andrew Clark

Reputation: 208635

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

Upvotes: 0

Related Questions