Reputation: 1063
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
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
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
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
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
Reputation: 208635
while [ "$startvalue" -le "$stopvalue" -o "$startvalue" -ge "$stopvalue" ]
do
startvalue=$((startvalue+1))
echo $startvalue
done
Upvotes: 0