Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何检查字符串是否为版本号_Shell_Unix - Fatal编程技术网

Shell 如何检查字符串是否为版本号

Shell 如何检查字符串是否为版本号,shell,unix,Shell,Unix,如何在shell脚本中检查字符串是否包含数字/十进制格式的版本 对于eg,我们有1.2.3.5或2.3.5 如果我们这里的字符数没有限制怎么办。它可以是x.x.x.x或x.x 如果使用的是bash,则可以使用=~正则表达式匹配二进制运算符,例如: pax> if [[ 1.x20.3 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then echo yes ; fi pax> if [[ 1.20.3 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]

如何在shell脚本中检查字符串是否包含数字/十进制格式的版本

对于eg,我们有1.2.3.5或2.3.5


如果我们这里的字符数没有限制怎么办。它可以是x.x.x.x或x.x

如果使用的是
bash
,则可以使用
=~
正则表达式匹配二进制运算符,例如:

pax> if [[ 1.x20.3 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then echo yes ; fi

pax> if [[ 1.20.3 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then echo yes ; fi
yes
对于您的特定测试数据,以下正则表达式将起到作用:

^[0-9]+(\.[0-9]+)*$

(一个数字后跟任意数量的
扩展)但是,如果要处理边缘情况,如
1.2-rc7
4.5-special
,则需要一些更复杂的操作。

如果使用
bash
,则可以使用
=~
正则表达式匹配二进制运算符,例如:

pax> if [[ 1.x20.3 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then echo yes ; fi

pax> if [[ 1.20.3 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then echo yes ; fi
yes
对于您的特定测试数据,以下正则表达式将起到作用:

^[0-9]+(\.[0-9]+)*$
(一个数字后接任意数量的
扩展名)不过,如果您想处理像
1.2-rc7
4.5-special
这样的边缘情况,您需要更复杂一些。

使用:

这接受
数字.数字.数字
数字.数字.数字.数字

更改
{2,3}
以缩小或放大可接受的
.位数(或
{2,}
表示“至少2”)

  • ^
    表示字符串的开头
  • [0-9]+
    表示至少一位数字
  • \。
    是一个点
  • (…){2,3}
    接受
  • $
    表示字符串结束
使用:

这接受
数字.数字.数字
数字.数字.数字.数字

更改
{2,3}
以缩小或放大可接受的
.位数(或
{2,}
表示“至少2”)

  • ^
    表示字符串的开头
  • [0-9]+
    表示至少一位数字
  • \。
    是一个点
  • (…){2,3}
    接受
  • $
    表示字符串结束

翻转逻辑:检查是否包含“无效”字符:

$ str=1.2.3.4.5; [[ $str == *[^0-9.]* ]] && echo nope || echo yup
yup
$ str=123x4.5;   [[ $str == *[^0-9.]* ]] && echo nope || echo yup
nope
这个答案的缺点是:

$ str=123....; [[ $str == *[^0-9.]* ]] && echo nope || echo yup
yup

翻转逻辑:检查是否包含“无效”字符:

$ str=1.2.3.4.5; [[ $str == *[^0-9.]* ]] && echo nope || echo yup
yup
$ str=123x4.5;   [[ $str == *[^0-9.]* ]] && echo nope || echo yup
nope
这个答案的缺点是:

$ str=123....; [[ $str == *[^0-9.]* ]] && echo nope || echo yup
yup

如果您确实仅限于Bourne shell,请使用expr:


我相信有一些解决方案涉及awk或sed,但这就可以了。

如果您确实只限于Bourne shell,请使用expr:


我确信有涉及awk或sed的解决方案,但这就可以了。

正则表达式?您关心-alpha版本、RC版本、稳定版本等吗?希望您的脚本不包含IP地址。正则表达式?您关心-alpha版本、RC版本、稳定版本、,等等?希望您的脚本不包含IP地址。您可以使用
{2,}
删除上限:1.2.3.4.5.6.7。8@glennjackman谢谢问题是,它似乎是3或4个数字,但实际上,可能至少是2(+1,第一个),您可以使用
{2,}
删除上限:1.2.3.4.5.6.7。8@glennjackman谢谢问题是,它似乎是3或4个数字,但事实上,这可能至少是2(+1,第一个)。实际上,这将接受“1..2”,这可能是您无法接受的。实际上,这将接受“1..2”,这可能是您无法接受的。