ユーザーが数字を正しく入力するまで質問が続くようにループを作成しようとしています。私はこれを試しましたが、私が何を間違っていたのかわかりません。どんな助けでも大変感謝します。
#!/bin/sh
read -p "Welcome to the Draw Program. Please enter a number in-between 5-20: " input
while [ $input -lt 5 ] && [ $input -gt 20 ]
do
echo "Your number wasn't within the range. Please re-enter"
done
答え1
どのように同時に数字が5より小さいのですか?そして20より大きいですか?私の考えでは、あなたが望むもの:
while [ "$input" -lt 5 ] || [ "$input" -gt 20 ]
また、ループの番号を再度求めるメッセージを表示する必要があります。
while [ "$input" -lt 5 ] || [ "$input" -gt 20 ]
do
read -rp "Your number wasn't within the range. Please re-enter" input
done
ちなみに、POSIX では読み込みに -p オプションを指定しないので、すべての形式の sh でサポートされるという保証はありません。プログラムが複数のあいまいなオペレーティングシステムで使用されることを意図しており、移植性が重要な場合は、次のことができます。
printf '%s' "Your number wasn't within the range. Please re-enter: "
read -r input
答え2
次のように書くのがより直感的で明確です。
while ! (( (5 <= input) && (input <= 20) )); do
echo "Your number wasn't within the range. Please re-enter"
done
上から見ればとinput
の間にテスト中であることが一目でわかりますが、コードに変数名がそこにあるから5
だ20
。input