我知道如何检查一个参数是否为整数,使用以下代码:
if [[ $2 = *[[:digit:]]* ]]; then
# $2 is a number
else
# $2 is not a number
fi
然而,我需要检查参数是否不是整数。我该如何做?
$2 = *[[:digit:]]*
只是检查 $2
是否包含数字。
# is an integer
[[ $2 =~ ^[[:digit:]]+$ ]]
# is not an integer
[[ ! $2 =~ ^[[:digit:]]+$ ]]
一种强大且具有可移植性(符合POSIX标准;在dash
中进行了测试)的方法是检查shell是否可以将变量解析为整数,如下面的脚本所示。
#!/bin/sh
# test-int.sh
# A script that tests whether its first argument is an integer
if [ "$1" -eq 0 -o "$1" -ne 0 ] >/dev/null 2>&1; then
printf "integer: %s\n" "$1"
else
printf "not an integer\n"
fi
$ dash test-int.sh foo
not an integer
$ dash test-int.sh 098234
integer: 098234
$ dash test-int.sh 77239asdfasf
not an integer
$ dash test-int.sh -77239
integer: -77239
%d
。非常简单,你知道的。你可以这样做:
if echo $Myvar | egrep -q '^[0-9]+$'; then
# $Myvar is a number
else
# $Myvar is not a number
fi
这是我主要用于数字检查的东西。
你的测试仅检查输入是否为数字;例如,如果$2是“43”,那么它将打印: 43不是一个数字 通过正则表达式修复您的解决方案可以检查实际数字:
if [[ $2 =~ ^-?[[:digit:]]+$ ]]; then
echo "$2 is a number"
fi
if [[ ! $2 =~ ^-?[[:digit:]]+$ ]]; then
echo "$2 is not a number"
fi