В BASH, есть ли способ найти точно IP-адрес для всех интерфейсов?И удалить всю другую информацию? - PullRequest
1 голос
/ 18 октября 2011

Как я могу получить только 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>

Follow: Только для одного ip: $ ifconfig eth0 |grep 'inet addr:' |cut -d: -f2 |awk '{print $ 1}' 192.168.1.2

Ответы [ 2 ]

2 голосов
/ 18 октября 2011

если вы устанавливаете пакет 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 интерфейсов, в то время как только eth0 и lo работают:

eth0,123.234.10.12
lo,127.0.0.1
vboxnet0,NON-IP
wlan0,NON-IP
wlan1,NON-IP
2 голосов
/ 18 октября 2011

Это не очень элегантно, как и bash, но вы можете сделать следующее, если у вас есть и awk, и sed:

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

Я бы даже не поспорил на то, что он невероятно портативный, так что, возможно,у кого-то есть лучший ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...