因此,我尝试识别2组数字之间的差异作为参数输入到脚本中。一个是电话号码,一个是打印mongodb日志的限制。我能想到的最简单的方法是,如果该数字超过7位,则最有可能是电话号码,因为打印mongo结果太长了。
我正在尝试将其放入案例声明中
case "$1" in
regex here ) echo "not msisdn";;
regex here ) echo "msisdn";;
*) echo "not found";;
esac
我当时想将其转换为字符串并检查长度可能是最简单的,因为我似乎找不到任何有关如何查找所输入数字位数的体面信息。
编辑:我应该注意,我当时正在考虑将所有这些内容放入if语句中,但这不是我要检查的唯一情况,而且我认为if语句会变得很冗长。我正在创建的脚本大部分已经是ifs,因此尝试对其进行一些更改。让我知道我是否错了。
答案 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