我正在尝试做一些足够普通的事情:在shell脚本中解析用户输入。如果用户提供了一个有效的整数,则脚本将执行一件事,如果无效,则脚本将执行其他操作。麻烦的是,我还没有找到一种简便(且相当优雅)的方法-我不想将它逐个字符地分开。
我知道这一定很容易,但我不知道如何。我可以用十几种语言来做,但是不能用BASH!
在我的研究中,我发现:
在其中有一个讨论正则表达式的答案,但据我所知,这是C语言中可用的功能(以及其他功能)。尽管如此,它看起来还是一个不错的答案,所以我尝试使用grep进行尝试,但是grep不知道该怎么做。我尝试了-P,这意味着将其视为PERL regexp-nada。破折号E(-E)也不起作用。而且-F也没有。
为了清楚起见,我正在尝试类似的事情,寻找任何输出-从那里,我会整理脚本以利用我得到的一切。(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
[
与旧版本兼容test
;[[
是Bash的新事物,它具有更多的操作和不同的报价规则。如果您已经决定坚持使用Bash,那就去吧[[
(确实更好);如果您需要移植到其他外壳,请[[
完全避免。