入力された数値が整数であることを確認する

入力された数値が整数であることを確認する

入力が整数であることを確認しようとしましたが、何百回も確認しましたが、エラーが見つかりませんでした。ああ動作しません。すべての入力(数字/文字)に対してifステートメントをトリガーします。

read scale
if ! [[ "$scale" =~ "^[0-9]+$" ]]
        then
            echo "Sorry integers only"
fi

私は引用符を使ってみましたが、逃したか何もしませんでした。私は何が間違っていましたか?入力が整数かどうかをテストする簡単な方法はありますか?

答え1

引用符の削除

if ! [[ "$scale" =~ ^[0-9]+$ ]]
    then
        echo "Sorry integers only"
fi

答え2

-eq演算子の使用テスト注文する:

read scale
if ! [ "$scale" -eq "$scale" ] 2> /dev/null
then
    echo "Sorry integers only"
fi

bashPOSIXシェルでのみ機能するわけではありません。 POSIXではテスト文書:

n1 -eq  n2
    True if the integers n1 and n2 are algebraically equal; otherwise, false.

答え3

OPは正の整数だけが欲しいようです:

[ "$1" -ge 0 ] 2>/dev/null

例:

$ is_positive_int(){ [ "$1" -ge 0 ] 2>/dev/null && echo YES || echo no; }
$ is_positive_int word
no
$ is_positive_int 2.1
no
$ is_positive_int -3
no
$ is_positive_int 42
YES

[テストが必要です。

$ [[ "word" -eq 0 ]] && echo word equals zero || echo nope
word equals zero
$ [ "word" -eq 0 ] && echo word equals zero || echo nope
-bash: [: word: integer expression expected
nope

これは、逆参照が次に発生するためです[[

$ word=other
$ other=3                                                                                                                                                                                  
$ [[ $word -eq 3 ]] && echo word equals other equals 3
word equals other equals 3

答え4

符号なし整数の場合は、次を使用します。

read -r scale
[ -z "${scale//[0-9]}" ] && [ -n "$scale" ] || echo "Sorry integers only"

テスト:

$ ./test.sh
7
$ ./test.sh
   777
$ ./test.sh
a
Sorry integers only
$ ./test.sh
""
Sorry integers only
$ ./test.sh

Sorry integers only

関連情報