我需要能够在接口上提取IPv4掩码/前缀长度并以CIDR格式表示它。例如:
$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:9f:af:5b
inet addr: 20.30.40.50 Bcast:20.30.40.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe9f:af5b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:261023 errors:0 dropped:0 overruns:0 frame:0
TX packets:22390 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:76737163 (76.7 MB) TX bytes:2750807 (2.7 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:81879 errors:0 dropped:0 overruns:0 frame:0
TX packets:81879 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8061949 (8.0 MB) TX bytes:8061949 (8.0 MB)
我需要获取' Mask'关于eth0的(255.255.255.0)并将其表示为' / 24'。我怎么在bash中这样做?
或者是否有其他方法可以获取我正在寻找的信息?
谢谢!
答案 0 :(得分:0)
您可以创建这样的脚本来解析ifconfig
输出并打印mask
值:
ifconfig | awk -F 'Mask:' '/Mask/ && !/127\.0\.0\.1/{print $2 "/24"}'
255.255.255.0/24
答案 1 :(得分:0)
您可以使用ip命令。
ip -4 a | grep 'inet' | awk '{print $2}'
答案 2 :(得分:0)
也许这个:
echo -n /;ip -4 addr | awk '/eth0/ { getline; {print $2} }' | cut -f2 -d/
答案 3 :(得分:0)
以下是使用sed提取Mask的方法:
ifconfig eth0|sed -n "s|.*Mask:\(.*\)|\1|p"