2011-12-05 23 views
1

私は停止と開始番号を取り、その間の数字を数えます - 私はそれが "停止"番号がreacedかどうかにかかわらず増加し続けるようにしてytingしているので、Ctrl + zは押されていますが、私のwhile条件を認識していません。whileループをbashスクリプトで正しくループする方法は?

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

答えて

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

を '$のstartvalue'は、常に(両方)に等しい(第一条件)よりも小さいため、まだ永遠ループに起こっていること、または(秒) '$ stopvalue'より大きい。 – Kevin

+0

@ケビン - 良い点、私はループが意味を成しているかどうかを見て、私は構文を固定していた多くの時間を費やしていませんでした。 –

+0

これは正しい構文です。テストでは、** - ** **を使用しなければならず、** || **を使用しないでください。 ||全く違うもので、その後は別のシェルコマンド(テストのようなもの)が必要です。 – Cougar

2

あなたの主な問題は、あなたの状態にあります。

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

あなたは$startvalue$stopvalue(より小さいまたは等しい)または(より大きいか等しい)であれば継続するように指示されています。 $startvalue$stopvalueの任意の組み合わせの場合、一方は他方よりも小さく、等しいか、または大きくなります。後半を取り出して、$startvalue$stopvalue以下の場合にのみ続行します。

そして、あなたはそれを書く必要があります。

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

を今、あなたは、whileループについて2つの答えを持っていることを、私の代わりにforループを使用することをお勧めします:

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

は私がループしながら、シンプルを使用プログラム。それは私のために働く。我々はそれを宣言しているが、ループ内の任意の変数を渡す前に、私の理解あたりとして:

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   
関連する問題