Kilka odpowiedzi wydają się być przy użyciu nowszej ip
polecenia (zastępczego ifconfig
), więc tutaj jest jeden, który używa ip addr
, grep
i awk
po prostu wydrukować adres IPv4 związany z wlan0
interfejsem:
ip addr show wlan0|grep inet|grep -v inet6|awk '{print $2}'|awk '{split($0,a,"/"); print a[1]}'
Chociaż nie jest to najbardziej kompaktowe ani wymyślne rozwiązanie, jest (prawdopodobnie) łatwe do zrozumienia (patrz wyjaśnienie poniżej) i zmodyfikowania do innych celów, takich jak pobranie ostatnich 3 oktetów adresu MAC, takich jak ten:
ip addr show wlan0|grep link/ether|awk '{print $2}'|awk '{split($0,mac,":"); print mac[4] mac[5] mac[6]}'
Objaśnienie: ip addr show wlan0
wyświetla informacje powiązane z wymienionym interfejsem sieciowym wlan0
, które powinny być podobne do następującego:
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
Następnie grep inet
odfiltrowuje wiersze, które nie zawierają „inet” (konfiguracja IPv4 i IPv6) i grep -v inet6
odfiltrowuje pozostałe wiersze, które zawierają „inet6”, co powinno dać w wyniku pojedynczy wiersz taki jak ten:
inet 172.18.18.1/24 brd 172.18.18.255 scope global noprefixroute wlan0
Na koniec pierwsza awk
wyodrębnia pole „172.18.18.1/24”, a druga usuwa skrót maski sieci, pozostawiając tylko adres IPv4.
Myślę też, że warto wspomnieć, że jeśli tworzysz skrypty, często istnieje wiele bogatszych i / lub solidniejszych narzędzi do uzyskiwania tych informacji, których możesz chcieć użyć. Na przykład, jeśli używasz Node.js ipaddr-linux
, jeśli używasz Rubiego linux-ip-parser
, itd.
Zobacz też /unix/119269/how-to-get-ip-address-using-shell-script