UNIXシェルスクリプト:「大文字と小文字」を使用したユーザー入力の検証

UNIXシェルスクリプト:「大文字と小文字」を使用したユーザー入力の検証

入力が文字列または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]+$ループは終了します。

答え2

2つの変数を同時に確認するには、接続して確認できます。

変更された部分は次のとおりです。

case $num1$num2 in 
'' |*[!0-9]*)
    echo "please enter a valid number"
    exit
    ;;

exitエラーを印刷した直後に終了することもできます。

答え3

これを行うには、カスタム関数を定義できます。

# func def.
isInt() {
    case ${1-} in '' | *[!0-9]* ) return 1 ;; esac
    return 0
}

# now use it as:
if isInt "$num1"; then
   echo "$num1 is a valid integer"
else
   echo "$num1 is not an integer"
fi

case正規表現の代わりにワイルドカードを使用して機能します。

関連情報