Answers:
使用测试命令的-eq
运算符:
read scale
if ! [ "$scale" -eq "$scale" ] 2> /dev/null
then
echo "Sorry integers only"
fi
它不仅可以在bash
POSIX shell中使用,而且也可以在其中使用。从POSIX 测试文档中:
n1 -eq n2
True if the integers n1 and n2 are algebraically equal; otherwise, false.
[[
而不是旧测试[
。
对于无符号整数,我使用:
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
由于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
( scale=${scale##*[!0-9]*}
: ${scale:?input must be an integer}
) || exit
那会检查并输出您的错误。
OPTIND
在这里也很好 只是赛亚人
请在Bash stackoverflow页中检查如何测试变量是否为数字。此页面还有其他一些检查整数的好方法。