私は、ユーザーが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."
答え2
これは働きます:
read -p "Please type a number between 1-10: " insertnum
while true; do
if [ "$insertnum" -ge 1 ] && [ "$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
read -p "Please type a number between 1-10: " insertnum
fi
done
echo "We will now do a countdown from $insertnum to 0 using a for loop."
少なくとも、ユーザーに数字を求めるシェル関数を使用します。ユーザーが有効な範囲外の数値を入力すると、このコードが複数回実行されるためです。プログラミングの言葉:繰り返さないでください。
答え3
while true ; do
read -p "Please type a number between 1-10: " insertnum
if [ "${insertnum}" -ge 1 ] && [ "${insertnum}" -le 10 ]
then
echo -e "acceptable answer between 1 and 10\n\n\n"
break
else
echo -e "your answer is unacceptable. It has to be be between 1 and 10\n\n\n"
fi
done
echo "We will now do a countdown from ${insertnum} to 0 using a for loop."
答え4
短いスクリプト:
unset a
until [ "$a" = 1 ]
do read -p "Please type a number between 1-10: " insertnum
: $(( a=( insertnum > 0 )&( insertnum < 11 ) ))
printf 'Your number is %.'"$a"'0sbetween 1-10.\n\n' 'not '
done
echo "We will now do a countdown from $insertnum to 0 using a for loop."