在Linux shell编程时,需要判断输入的版本号是否满足规则。发现使用类Perl的正则表达式,总是匹配失败,例如匹配:1.4.1这样的版本号,使用这样的正则表达式:“^\d{1}\.\d{1}\.\d{1,3}$”。
经测试,bash shell中 if语句的正则表达式匹配不支持"\d"这种数字匹配方式,而只支持"[0-9]"这样的形式。
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
[root@master01]# ./test.sh 1
input:1
Invalid version number.
input:1
Invalid version number.
input:1
Valid version number.
rx='^([0-9]+\.){0,2}(\*|[0-9]+)$'
if [[ $1 =~ $rx ]]; then
#do something
else
echo Invalid version number.
fi
1、如何验证,使用bash中一个正则表达式版本号是有效的?(How do I validate that a version number is valid using a regexp in bash?). http://www.it1352.com/326220.html