开始熟悉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\." | head -n 1
最佳答案
它是regEx
的组合,用于检查IPv4
地址的语法是否正确(第一个语法)以及检查有效的IP
是否不属于特定范围。regEx
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
匹配4个八位字节,长度从1-3
开始,由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/