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

 

参考:

1、如何验证,使用bash中一个正则表达式版本号是有效的?(How do I validate that a version number is valid using a regexp in bash?). http://www.it1352.com/326220.html

 

 

 

posted @ 2019-10-08 17:14  hongweigg  阅读(63)  评论(0编辑  收藏  举报