読み取りを使用する無限のwhileループの問題

読み取りを使用する無限のwhileループの問題

私は、ユーザーが1から10までの数字を挿入する必要がある小さなスクリプトを書いています。その後、スクリプトは数字が要求された値の間にあるかどうかをユーザーに知らせ、そこから続行します。

ただし、値が1未満または10より大きい場合は、スクリプトを画面に読み戻そうとすると問題が発生します。スクリプトが実行されるたびに正しいかどうかにかかわらず、スクリプトは終了し、「完了」の後にechoステートメントに移動します。

ユーザーが誤った値を入力し続ける場合は、「無限ループ」を生成しようとします。

「完了」の後のエコーステートメントは私のスクリプトの2番目の部分ですが、私が問題を抱えている部分ではありません。

あなたが提供できる助けに感謝します。

スクリプト:

echo "Please type a number between 1-10."
read insertnum
while [ "$insertnum" -ge 1 -a "$insertnum" -le 10 ]
 do
    if [ "$insertnum" -ge 1 -a "$insertnum" -le 10 ]
     then
# Prompt the user that their answer is acceptable
     echo "Your answer is between 1-10"
     echo
     break
    else
# Prompt the user that their answer is not acceptable
     echo "Your number is not between 1-10."
     echo
     echo "Please type a number between 1-10."
     read insertnum
     echo
fi
done
echo "We will now do a countdown from $insertnum to 0 using a for loop."

ベストアンサー1

私は次のように書きます:

min=1 max=10
until
  printf "Please type a number between $min-$max: "
  IFS= read -r insertnum
  [ "$insertnum" -ge "$min" ] && [ "$insertnum" -le "$max" ]
do
  echo "Your number is not between $min-$max."
done
echo "Your answer is between $min-$max"
echo
echo "We will now do a countdown from $insertnum to 0 using a for loop."

おすすめ記事