首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上一个字节验证不适用于bash中的IP。

上一个字节验证不适用于bash中的IP。
EN

Stack Overflow用户
提问于 2014-02-26 07:14:45
回答 2查看 117关注 0票数 0

我有以下bash脚本来验证IP地址:

代码语言:javascript
复制
#!/bin/bash
validFormatIP()
{
    grep -E -q '^(25[0-4]|2[0-4][0-9]|1[0-9][0-9]|[1]?[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' <<< "$1" && echo "Valid IP" || echo "Invalid IP" 
}

validFormatIP $1

它正确地验证第一个、第二个和第三个字节的IP地址,而不是第四个字节。

下面是我的脚本的输出,以更好地说明问题所在:

代码语言:javascript
复制
$ ./script.bash 1000.33.0.1
Invalid IP
$ ./script.bash 34.1000.0.1
Invalid IP
$ ./script.bash 34.33.1000.1
Invalid IP
$ ./script.bash 34.33.0.1000
Valid IP
$ 

可以看到,它接受1000作为最后一个字节的有效值,尽管它实际上是无效的。

有人知道问题在哪里吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-26 07:35:01

您需要将$添加到regex的末尾,它将告诉regex以确保最后一个字符与模式匹配。

代码语言:javascript
复制
^(25[0-4]|2[0-4][0-9]|1[0-9][0-9]|[1]?[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

应该为你工作!

然而,这里有一个更短的模式,应该做同样的事情。

代码语言:javascript
复制
^((25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})$

您可以使用{x,X}来指定min和max x=min和X=MAX,当然还需要在一些引号中删除它。

票数 2
EN

Stack Overflow用户

发布于 2014-02-26 07:30:13

这仅仅是因为你没有在最后锚定它,所以它与"34.33.0.1000“中的"34.33.0.100”匹配。在表达式末尾添加一个$

代码语言:javascript
复制
    grep -E -q '^(25[0-4]|2[0-4][0-9]|1[0-9][0-9]|[1]?[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' <<< "$1" && echo "Valid IP" || echo "Invalid IP" 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22034341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档