ユーザー入力による計算のための番号を取るbashスクリプトを作成しました。私が持っている問題は、ユーザが誤って文字やスペースを入力した場合、スクリプト全体が失敗し、ユーザが再び起動しなければならないということです。Bash:ユーザー入力が正しいことを確認してください
他のものが誤って入力された場合、入力を再度尋ねる数値だけが入力を確認する簡単な方法でなければなりませんか?
ユーザー入力による計算のための番号を取るbashスクリプトを作成しました。私が持っている問題は、ユーザが誤って文字やスペースを入力した場合、スクリプト全体が失敗し、ユーザが再び起動しなければならないということです。Bash:ユーザー入力が正しいことを確認してください
他のものが誤って入力された場合、入力を再度尋ねる数値だけが入力を確認する簡単な方法でなければなりませんか?
簡単なグロブ使用し、whileループ
number=""
while [[ ! $number =~ ^[0-9]+$ ]]; do
echo Please enter your age
read number
done
echo You are $number years old
を使用し、重い正規表現エンジンを避けるために:
if [[ ! $input || $input = *[^0-9]* ]]; then
echo "Error: '$input' is not a number." >&2
fi
ああ、良いアイデア。私は忘れ去っている施設については忘れています。私はそれが ""受け入れることがわかった。 "$ input =" "|| $ input = * [^ 0-9] *"はそれを修正する必要があります。 –
空の入力を受け付けるという点で失敗します。 –
は、番号の前後にスペースをでき_33、または33___ではなくを3__3。文字はありません。 0又は
# -- get input until Correct
unset get_num
while [[ ! ${get_num} =~ ^[0-9]+$ ]]; do
echo "Please enter in a number:"
read get_num
done
echo This is a number : ${get_num}
# -- get input until Correct (within range)
unset get_num
while [[ ! ${get_num} =~ ^[0-9]+$ ]]; do
echo "Please enter in a number within range of (1-30):"
read get_num
! [[ ${get_num} -ge 1 && ${get_num} -le 30 ]] && unset get_num
done
echo This is a number withn a range : ${get_num}
"正規表現は数字ではなくテキストを扱うので、指定された範囲内の数字にマッチすることはちょっとした注意が必要です。[0-255 ]を0から255までの数字にマッチさせます。有効な正規表現ですが、完全に異なるものにマッチします。 [0-255]は、文字範囲0-2、文字5、文字5(再び)の3つの要素を持つ文字クラスです。この文字クラスは、ちょうど[0125]のような単一の数字0、1、2または5、一致する「〜http://www.regular-expressions.info/numericranges.html
# -- get input until Correct (within range) (another way)
unset get_num
while [[ ! ${get_num} =~ ^([1-9]|1[0-9]|2[0-9]|30)$ ]]; do
echo "Please enter in a number within range of (1-30):"
read get_num
done
echo This is a number withn a range : ${get_num}
# -- get input, and check it only (no while loop)
unset get_num
echo "Please enter in a number:"
read get_num
if [[ ! ${get_num} =~ ^[0-9]+$ ]] ;then
echo "${get_num} isn't a number"
else
echo "${get_num} is a number"
fi
はい、うまくいきますが、同じ変数を使用しているので、次に来るときに最後のエントリの値があります 何か考えていますか? –
私はそれが何を意味するのかよく分かりません。我々はループに入る前に空の文字列に: –
上記の解決策は、 '22aa'、 'aa 22'、または 'a23bb'のような入力を受け付けます。 d文字列の最後: [[! ($数=〜^ [0-9] + $)]]; do –