Linux shell中版本号的模式匹配
问题:
在Linux shell编程时,需要判断输入的版本号是否满足规则。发现使用类Perl的正则表达式,总是匹配失败,例如匹配:1.4.1这样的版本号,使用这样的正则表达式:“^\d{1}\.\d{1}\.\d{1,3}$”。
解决:
经测试,bash shell中 if语句的正则表达式匹配不支持"\d"这种数字匹配方式,而只支持"[0-9]"这样的形式。
1、实验代码:
function regtest(){
echo input:$1
if [[ $1 =~ $rx ]]; then
echo Valid version number.
else
echo Invalid version number.
fi
}
rx='(\d){1}'
regtest $1
rx='\d{1}'
regtest $1
rx='[0-9]{1}'
regtest $1
2、测试:
[root@master01]# ./test.sh 1
input:1
Invalid version number.
input:1
Invalid version number.
input:1
Valid version number.
3、一个较为实用的合法版本号判断方法:
rx='^([0-9]+\.){0,2}(\*|[0-9]+)$'
if [[ $1 =~ $rx ]]; then
#do something
else
echo Invalid version number.
fi
参考: