数字が入力されるまでユーザー入力が繰り返されます。

数字が入力されるまでユーザー入力が繰り返されます。

ユーザーが数字を正しく入力するまで質問が続くようにループを作成しようとしています。私はこれを試しましたが、私が何を間違っていたのかわかりません。どんな助けでも大変感謝します。

#!/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の間にテスト中であることが一目でわかりますが、コードに変数名がそこにあるから520input

関連情報