我想做一些常用的东西:在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