Несколько ответов , по всей видимости, использует более новую ip
команду (замена для ifconfig
) , поэтому здесь есть один , который использует ip addr
, grep
и awk
просто напечатать адрес IPv4 , связанный с wlan0
интерфейсом:
ip addr show wlan0|grep inet|grep -v inet6|awk '{print $2}'|awk '{split($0,a,"/"); print a[1]}'
Хотя это не самое компактное или необычное решение, его (возможно) легко понять (см. Объяснение ниже) и изменить для других целей, например, для получения последних 3 октетов MAC-адреса следующим образом:
ip addr show wlan0|grep link/ether|awk '{print $2}'|awk '{split($0,mac,":"); print mac[4] mac[5] mac[6]}'
Объяснение: ip addr show wlan0
выводит информацию, связанную с указанным сетевым интерфейсом wlan0
, которая должна быть похожей на это:
4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether dc:a6:32:04:06:ab brd ff:ff:ff:ff:ff:ff
inet 172.18.18.1/24 brd 172.18.18.255 scope global noprefixroute wlan0
valid_lft forever preferred_lft forever
inet6 fe80::d340:5e4b:78e0:90f/64 scope link
valid_lft forever preferred_lft forever
Далее grep inet
фильтры из линий , которые не содержат «инет» (IPv4 и IPv6 конфигурации) и grep -v inet6
фильтры из остальных строк , которые делают содержать «inet6», что должно привести в одну линию , как этот:
inet 172.18.18.1/24 brd 172.18.18.255 scope global noprefixroute wlan0
Наконец, первый awk
извлекает поле «172.18.18.1/24», а второй удаляет сокращенную сетевую маску, оставляя только IPv4-адрес.
Кроме того, я думаю, стоит упомянуть, что если вы пишете сценарии, часто есть много более богатых и / или более надежных инструментов для получения этой информации, которые вы можете использовать вместо этого. Например, при использовании Node.js есть ipaddr-linux
, при использовании Ruby linux-ip-parser
и т. Д.
См. Также /unix/119269/how-to-get-ip-address-using-shell-script