Bash 如何检查传递给shell脚本的参数是否不是整数?

Bash 如何检查传递给shell脚本的参数是否不是整数?,bash,shell,unix,scripting,arguments,Bash,Shell,Unix,Scripting,Arguments,我知道如何使用以下方法检查参数是否为整数: if[[$2=*[:digit:][]*];然后 #2美元是一个数字 其他的 #2美元不是一个数字 fi 但是,我需要检查参数是否不是整数。我该怎么做呢?你知道,这很容易。您可以这样做: if echo $Myvar | egrep -q '^[0-9]+$'; then # $Myvar is a number else # $Myvar is not a number fi 这是我主要用于数字检查的东西

我知道如何使用以下方法检查参数是否为整数:

if[[$2=*[:digit:][]*];然后
#2美元是一个数字
其他的
#2美元不是一个数字
fi

但是,我需要检查参数是否不是整数。我该怎么做呢?

你知道,这很容易。您可以这样做:

   if echo $Myvar | egrep -q '^[0-9]+$'; then
      # $Myvar is a number
   else
      # $Myvar is not a number
   fi

这是我主要用于数字检查的东西。

$2=*[:digit:]*
只检查
$2
是否包含数字


测试仅检查输入是否为数字;例如,如果$2为“43”,则将打印: 43不是一个数字 可以使用正则表达式修复用于检查实际数字的解决方案:

if [[ $2 =~ ^-?[[:digit:]]+$ ]]; then
    echo "$2 is a number"
fi
检查输入是否不是一个数字,然后只需否定测试:

if [[ ! $2 =~ ^-?[[:digit:]]+$ ]]; then
    echo "$2 is not a number"
fi
一种兼容POSIX的方法 一种健壮且可移植的(POSIX兼容;在
dash
中测试)方法是检查shell是否可以将变量解析为整数,如下面的脚本所示

#/垃圾箱/垃圾箱
#test-int.sh
#测试其第一个参数是否为整数的脚本
如果[“$1”-eq 0-o“$1”-ne 0]>/dev/null 2>&1;然后
printf“整数:%s\n”“$1”
其他的
printf“不是整数\n”
fi
测验 请注意,这种方法也可以接受开箱即用的负整数,但您可以轻松地将其修改为仅接受正整数


在我的脚本中,成功解析的整数被打印为字符串,但是,或者,您可能希望将其打印为整数,使用
%d

此命令不起作用,继续获取“语法错误接近意外标记”错误!事实上,唯一有效的命令是我最初使用的命令。@user2232423接近意外标记什么?
if [[ ! $2 =~ ^-?[[:digit:]]+$ ]]; then
    echo "$2 is not a number"
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