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

时间:2011-10-18 10:40:37

标签: linux bash archlinux bash4

我怎样才能获得IP以及它是哪个接口IP?这样我就可以保留一个记录文件,例如realtime.ini

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>

跟进:仅针对单个IP: $ ifconfig eth0 | grep'inet addr''| cut -d:-f2 | awk'{print $ 1}' 192.168.1.2

2 个答案:

答案 0 :(得分:2)

这不是非常优雅,也不是bash,但如果你同时拥有awk和sed,你可以做以下事情:

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

我不会打赌这个也非常便携,所以也许有人有更好的答案。

答案 1 :(得分:2)

如果您安装moreutils软件包,则可以使用方便的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个接口的示例输出,只有eth0lo已启动:

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