入力が整数であるかどうかを確認しようとしていますが、100回以上調べましたが、エラーは表示されません。悲しいかな、それは機能せず、すべての入力(数字/文字)のifステートメントをトリガーします
read scale
if ! [[ "$scale" =~ "^[0-9]+$" ]]
then
echo "Sorry integers only"
fi
私は引用符をいじってみましたが、それを逃したか、何もしませんでした。何が悪いのでしょうか?入力が単なる整数かどうかをテストする簡単な方法はありますか?
引用を削除
if ! [[ "$scale" =~ ^[0-9]+$ ]]
then
echo "Sorry integers only"
fi
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
符号なし整数の場合、次を使用します。
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
( scale=${scale##*[!0-9]*}
: ${scale:?input must be an integer}
) || exit
それがチェックを行い、エラーを出力します。
確認してください 変数がBashの数値であるかどうかをテストするにはどうすればよいですか stackoverflowページ。このページには、整数をチェックするための他の良い方法がいくつかあります。
POSIXおよびポータブルソリューションは次のとおりです。
read scale
if [ -z "${scale##*[!0-9]*}" ];
then echo "Sorry integers only"
fi