![检查输入数字是否为整数](https://linux22.com/image/54562/%E6%A3%80%E6%9F%A5%E8%BE%93%E5%85%A5%E6%95%B0%E5%AD%97%E6%98%AF%E5%90%A6%E4%B8%BA%E6%95%B4%E6%95%B0.png)
我试图检查输入是否为整数,我已经检查了一百遍,但没有发现错误。唉,它不起作用,它会触发所有输入(数字/字母)的 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
答案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