微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/bash/392198.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐