入力が文字列またはNULL以外の数値になるように、ユーザー入力を検証しようとしています。ユースケース
echo "input a number"
read num1
case $num1 in
"" |*[a-zA-Z]*)
echo "please inter a valid number"
esac
echo "input 2nd number"
read num2
let sum=$num1+$num2
echo "$num1 + $num2=$sum"
しかし、それは正しく動作しませんでした。入力に関する警告が表示されます。両方の変数を同時に検証する方法はありますか?
ベストアンサー1
Bashを使用すると、正規表現を使用して数値を検証できます。
#! /bin/bash
while [ -z "$REPLY" ]; do
read -p "Enter a valid number: "
if ! [[ "$REPLY" =~ ^[0-9]+$ ]] ; then
echo Bad number: $REPLY
REPLY=
fi
done
echo A valid number: $REPLY
プログラムは変数が$REPLY
設定されるまで入力を読み続けますread
。数値が正確に一致すると、^[0-9]+$
ループは終了します。