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

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值