gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:47 24 4
gpt4 key购买 nike

刚开始熟悉linux,对脚本中的这一行感到困惑

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\。” |头-n 1

最佳答案

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

正则表达式

[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.16, 172.17, 172.18, 172.19

  • 172.20172.21172.22172.23172.29
  • 172.30, 172.31, 172.32
  • 10.
  • 127.

  • 255.

  • 0.

head -n 1 在这里是无关紧要的,因为上面的命令自始至终只在单行上运行。

至于脚本的其余部分

# 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

关于linux - 对脚本中的这一行感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41777461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com