加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 16:45:02 所属栏目:安全 来源:网络整理
导读:我想做一些常用的东西:在shell脚本中解析用户输入。如果用户提供了一个有效的整数,脚本做一件事,如果不是有效的,它会做别的事情。麻烦的是,我没有找到一个简单(和合理优雅)的方式 – 我不想要分开的char by char。 我知道这一定很容易,但我不知道如何
我想做一些常用的东西:在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读