Bash正则表达式用于某些数字长度

时间:2018-07-26 10:47:34

标签: regex bash

因此,我尝试识别2组数字之间的差异作为参数输入到脚本中。一个是电话号码,一个是打印mongodb日志的限制。我能想到的最简单的方法是,如果该数字超过7位,则最有可能是电话号码,因为打印mongo结果太长了。

我正在尝试将其放入案例声明中

case "$1" in

 regex here ) echo "not msisdn";;

 regex here ) echo "msisdn";;

 *) echo "not found";;

esac

我当时想将其转换为字符串并检查长度可能是最简单的,因为我似乎找不到任何有关如何查找所输入数字位数的体面信息。

编辑:我应该注意,我当时正在考虑将所有这些内容放入if语句中,但这不是我要检查的唯一情况,而且我认为if语句会变得很冗长。我正在创建的脚本大部分已经是ifs,因此尝试对其进行一些更改。让我知道我是否错了。

2 个答案:

答案 0 :(得分:3)

case不支持正则表达式;通配符语法是一种功能较弱的形式主义,称为 glob 模式 1

case $1 in
  *[!0-9]*)
    echo "Not a number";;
  ? | ?? | ??? | ???? | ????? | ??????)
    echo "Six digits or less";;
  '')
    echo "Empty string";;
  *)
    echo "Seven digits or more";;
esac

尚不清楚应分别处理非数字输入还是空输入,但这希望至少可以帮助您入门。


1 有人会认为,glob是正则表达式的严格限制形式。我当然不同意,因为这比有用的恕我直言更令人困惑-几个元字符具有完全不同的语义,而剩下的相似之处基本上是静态部分,而不是实际有用的模式。

答案 1 :(得分:0)

${#1}包含$1的长度。所以也许只是

if (( ${#1} > 7 )) ; then
    echo Phone number
else
    echo Too short for a phone number
fi