четверг, 30 августа 2012 г.

Как узнать ip адрес интерфейса и вывести только его

Маленький пример о том как использовать ifconfig, cut и awk чтобы вывести только ip адрес. Вывод команды ifconfig будет таким

$ /sbin/ifconfig

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:69527 errors:0 dropped:0 overruns:0 frame:0
          TX packets:69527 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:41559546 (39.6 MiB)  TX bytes:41559546 (39.6 MiB)
eth0      Link encap:Ethernet  HWaddr 00:17:9A:0A:F6:44
          inet addr:192.168.2.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::217:9aff:fe0a:f644/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:227614 errors:0 dropped:0 overruns:0 frame:0
          TX packets:60421 errors:0 dropped:0 overruns:0 carrier:0
          collisions:272 txqueuelen:1000
          RX bytes:69661583 (66.4 MiB)  TX bytes:10361043 (9.8 MiB)
          Interrupt:17
ra0       Link encap:Ethernet  HWaddr 00:50:56:C0:00:01
          inet addr:192.168.1.2  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::250:56ff:fec0:1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1024 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1320 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)


Выведем нужный нам интерфейс и исключим все, кроме строки с IP-адресом:

$ /sbin/ifconfig eth0| grep 'inet addr:'
inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0

Теперь подключим утилиту cut для того чтобы отделить IP. Говоря просым языком, cut разделит строку в виртуальный массив через ":" и возьмет 2-й элемент этого массива. Вывод будет таким:

$ /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2
192.168.2.1  Bcast

Ну и в конце с помощью awk вытаскиваем IP. Финальная команда будет выглядеть так:

$ /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
192.168.2.1

Истрочник

5 комментариев:

Viktor Alenkov комментирует...
Этот комментарий был удален автором.
Viktor Alenkov комментирует...

А так не короче?

$ /sbin/ifconfig eth0 | awk '/inet addr:/ {print substr($2, 6)}'

nicosha комментирует...

Виктор, спасибо , хорошее решение =)

nicosha комментирует...

ifconfig eth0 | sed -n '/inet addr:/s/ *inet addr:\([[:digit:].]*\) .*/\1/p'

вот еще шикарное решение

Viktor Alenkov комментирует...

nicosha, не слишком ли тяжелое?)