首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对脚本中的这一行感到困惑

对脚本中的这一行感到困惑
EN

Stack Overflow用户
提问于 2017-01-21 08:59:11
回答 2查看 88关注 0票数 0

只要开始熟悉linux,就会对脚本中的这一行感到困惑。

代码语言:javascript
运行
复制
get_ip(){
    local IP=$( ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1 )
    [ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipv4.icanhazip.com )
    [ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipinfo.io/ip )
    [ ! -z ${IP} ] && echo ${IP} || echo
}

我猜这应该能得到我的ip地址吧?

你们能给我详细解释一下吗?

这条线ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-21 09:19:37

它是regEx的组合,用于检查IPv4地址是否使用正确的语法(第一个语法)和检查有效的IP不属于特定的范围。

The regEx

[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

匹配与1-3长度相同的4个八进制,由数字0-9组成,由.隔开。这可以确保从处理中筛选出任何IP地址。

第二个标志为倒置匹配的-v标志,意思是排除这种类型的标志,

^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\.

不包括IPs

  • 192.168
  • 172.16172.17172.18172.19
  • 172.20172.21172.22172.23 upto 172.29
  • 172.30172.31172.32
  • 10.
  • 127.
  • 255.
  • 0.

在这里,head -n 1是不相关的,因为上面的命令只在整个一行上操作。

至于剧本的其余部分

代码语言:javascript
运行
复制
# This line checks if variable containing the IP address is empty and if it is
# empty i.e. the condition `[ -z ${IP} ] ` turned out to be true set the IP
# address to the value obtained from `wget` output
[ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipv4.icanhazip.com )

# same as above
[ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipinfo.io/ip )

# with a '!' symbol it means the variable is not empty just print value
# to stdout or (||) print just an empty output (just echo)
[ ! -z ${IP} ] && echo ${IP} || echo
票数 2
EN

Stack Overflow用户

发布于 2017-01-21 09:11:21

让它分解成几个部分:

ip addr -显示有关接口的信息

egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

-o,-只匹配,只打印匹配线的匹配(非空)部分,每个匹配部分位于单独的输出线上.

这试图匹配来自ip addr输出的IP地址。

egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\."

这不包括192.168..,172.16.-172.19之类的IP附件。等等..。

head -n 1此限制输出仅限于第一行。

因此,整个命令有效地尝试在您的接口上查找IP地址,而不是来自私有范围。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41777461

复制
相关文章

相似问题

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