![如何在shell中获取未格式化的ip地址信息?](https://linux22.com/image/841354/%E5%A6%82%E4%BD%95%E5%9C%A8shell%E4%B8%AD%E8%8E%B7%E5%8F%96%E6%9C%AA%E6%A0%BC%E5%BC%8F%E5%8C%96%E7%9A%84ip%E5%9C%B0%E5%9D%80%E4%BF%A1%E6%81%AF%EF%BC%9F.png)
我正在编写一个 shell 脚本,它需要有关网络连接状态的信息 - 诸如 IP 地址、子网、网络掩码等基本信息。
我只能使用ifconfig
sed/grep 来获取信息,但我希望有一种更简洁的方法来做到这一点 - 可能使用命令ip
或类似的实用程序。
我正在寻找可以产生以下结果的东西:
$ (magic command) ip
192.168.1.1
$ (magic command) netmask
255.255.255.0
$ (magic command) subnet
192.168.0.0
对于网络网关/DNS服务器可能也有类似情况。
这样的命令存在吗?也许有一个--unformatted
标志ip
或ifconfig
?我是不是太乐观/天真了?
谢谢 :)
答案1
您还可以使用或其他工具来ifdata
获取信息而无需解析输出:ip
grep
awk
[~]$ ifdata -pa eth0
192.168.246.161
[~]$ ifdata -pn eth0
255.255.240.0
[~]$ ifdata
Usage: ifdata [options] iface
-e Reports interface existence via return code
-p Print out the whole config of iface
-pe Print out yes or no according to existence
-pa Print out the address
-pn Print netmask
-pN Print network address
-pb Print broadcast
-pm Print mtu
-ph Print out the hardware address
-pf Print flags
-si Print all statistics on input
-sip Print # of in packets
-sib Print # of in bytes
-sie Print # of in errors
-sid Print # of in drops
-sif Print # of in fifo overruns
-sic Print # of in compress
-sim Print # of in multicast
-so Print all statistics on output
-sop Print # of out packets
-sob Print # of out bytes
-soe Print # of out errors
-sod Print # of out drops
-sof Print # of out fifo overruns
-sox Print # of out collisions
-soc Print # of out carrier loss
-som Print # of out multicast
-bips Print # of incoming bytes per second
-bops Print # of outgoing bytes per second
答案2
该ip
命令取代了该ifconfig
命令,并支持-o
更容易自动解析的选项。
例如:
ip -o addr show dev wlan0|awk '$3=="inet"{print $4}'
将产生类似如下的结果:
192.168.0.2/24
答案3
好吧,您可以尝试从输出中 grep 和 awk 信息,如下所示:ip addr show eth0 | grep 'inet ' | awk '{ print $2}'
你的输出应该如下所示:192.168.1.201/24
ip addr show eth0
获取来自 eth0 的信息。grep 'inet '
适用于 IPv4。'inet6' 应用于 IPv6。awk '{ print $2}'
只是将输出进一步减少到第二组字符。
网络掩码可以通过 IP 地址后的 /24 来确定。
答案4
是的,有一种方法可以制定你自己的命令并获取你的信息。
为了获得您的IP地址在任何文件中保存以下命令
myipaddr
:ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print $2}' | cut -f2 -d:
类似地得到网络掩码在文件中保存以下命令
mymask
:ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print $4}' | cut -f2 -d:
要得到广播(子网)将以下命令保存在另一个文件中
mysubnet
:ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print $3}' | cut -f2 -d:
然后使所有文件可执行并将其复制或移动到
/bin
目录:$ sudo chmod +x myipaddr mysubnet mymask $ sudo cp myipaddr mysubnet mymask /usr/bin
现在要获取所需的信息,您只需打开终端并运行以下任一命令。例如:
$ sudo myipaddr
应该显示如下内容:
192.168.1.11
$ sudo mymask
应该显示类似这样的内容:
255.255.255.0
$ sudo mysubnet
应该显示类似这样的内容:
192.168.1.255