В Bash есть ли способ найти именно IP -адрес для всех интерфейсов? И удалить все другие данные?

StackOverflow https://stackoverflow.com/questions/7805952

  •  25-10-2019
  •  | 
  •  

Вопрос

Как я могу получить только IP и какой это IP -IP -интерфейс? Чтобы я мог сохранить файл записи, такой как realtime.ini

1 - тест.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

Это было полезно?

Решение

Это не ужасно элегантно, и не является ударом, но вы можете сделать следующее, если у вас есть и Awk, и SED:

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

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

Другие советы

Если вы установите 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top