Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在BASH中,有没有办法精确地找到所有接口的IP地址?并删除所有其他信息';s_Linux_Bash_Archlinux_Bash4 - Fatal编程技术网

Linux 在BASH中,有没有办法精确地找到所有接口的IP地址?并删除所有其他信息';s

Linux 在BASH中,有没有办法精确地找到所有接口的IP地址?并删除所有其他信息';s,linux,bash,archlinux,bash4,Linux,Bash,Archlinux,Bash4,如何仅获取IP以及它是哪个接口IP?这样我就可以保存一个记录文件,比如realtime.ini em1,192.168.1.2 lo,127.0.0.1 wlan0,<not found> 1-test.sh #!/bin/bash ipstring ='inet (.*)' for i in $(ip addr); do echo $i #on found it write down to my realtime.ini as a list for future

如何仅获取IP以及它是哪个接口IP?这样我就可以保存一个记录文件,比如realtime.ini

em1,192.168.1.2
lo,127.0.0.1
wlan0,<not found>
1-test.sh

#!/bin/bash
ipstring ='inet (.*)'

for i in $(ip addr);
do
        echo $i #on found it write down to my realtime.ini as a list for future query
done
2-realtime.ini

em1,192.168.1.2
lo,127.0.0.1
wlan0,<not found>
em1192.168.1.2
lo,127.0.0.1
wlan0,
跟进:仅针对单个ip: $ifconfig eth0 | grep'inet addr:'| cut-d:-f2 | awk'{print$1}'
192.168.1.2

这不是非常优雅,bash也不是,但如果您同时拥有awk和sed,则可以执行以下操作:

ifconfig | awk 'BEGIN { FS = "\n"; RS = "" } { print $1 $2 }' | sed -e 's/ .*inet addr:/,/' -e 's/ .*//'

我也不认为它的可移植性非常好,所以也许有人会有更好的答案。

如果您安装
moreutils
软件包,您可以使用handy
ifdata
命令:

for INTF_PATH in /sys/class/net/* # list all interfaces
do
    INTF=$(basename $INTF_PATH) # interface name
    echo "$INTF,$(ifdata -pa $INTF)" # interface name and address
done
5个接口的示例输出,而只有
eth0
lo
处于启动状态:

eth0,123.234.10.12
lo,127.0.0.1
vboxnet0,NON-IP
wlan0,NON-IP
wlan1,NON-IP