Маленький пример о том как использовать 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
Истрочник
$ /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 комментариев:
А так не короче?
$ /sbin/ifconfig eth0 | awk '/inet addr:/ {print substr($2, 6)}'
Виктор, спасибо , хорошее решение =)
ifconfig eth0 | sed -n '/inet addr:/s/ *inet addr:\([[:digit:].]*\) .*/\1/p'
вот еще шикарное решение
nicosha, не слишком ли тяжелое?)
Отправить комментарий