BASH:测试字符串是否作为整数有效?

我想做一些常用的东西:在shell脚本中解析用户输入。如果用户提供了一个有效的整数,脚本做一件事,如果不是有效的,它会做别的事情。麻烦的是,我没有找到一个简单(和合理优雅)的方式 – 我不想要分开的char by char。

我知道这一定很容易,但我不知道如何。我可以做十几种语言,但不是BASH!

在我的研究中,我发现这:

Regular expression to test whether a string consists of a valid real number in base 10

还有一个答案谈到正则表达式,但就我所知,这是一个函数在C(其他)。仍然,它有什么看起来像一个伟大的答案,所以我尝试它与grep,但grep不知道该怎么办。我试着-P在我的框上的意思是把它当作一个PERL regexp – nada。 Dash E(-E)也没有工作。和也没有。

为了清楚,我正在尝试这样的东西,寻找任何输出 – 从那里,我会破解脚本,以利用我获得的任何优势。 (IOW,我期望一个不合格的输入不返回任何东西,而有效的行被重复)。

snafu=$(echo "$2" | grep -E "/^[-+]?(?:\.[0-9]+|(?:0|[1-9][0-9]*)(?:\.[0-9]*)?)$/")
if [ -z "$snafu" ] ;
then
   echo "Not an integer - nothing back from the grep"
else
   echo "Integer."
fi

有人请说明这是最容易做到的吗?

坦率地说,这是一个短暂的TEST,在我看来。它应该有一个这样的标志

if [ -I "string" ] ;
then
   echo "String is a valid integer."
else
   echo "String is not a valid integer."
fi

谢谢。

[[ $var =~ ^-?[0-9]+$ ]]

> ^表示输入模式的开始
> – 是一个文字“ – ”
>?意指“前面( – )”的0或1,
>意味着“前面的一个或多个([0-9])”
> $表示输入模式的结束

因此,正则表达式匹配一个可选的 – (对于负数的情况),后跟一个或多个十进制数字。

参考文献:

> http://www.tldp.org/LDP/abs/html/bashver3.html#REGEXMATCHREF

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...