刚开始熟悉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.20
、172.21
、172.22
、172.23
到172.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/