Peu de réponses semblent utiliser la nouvelle ip
commande (pour remplacer ifconfig
) voici donc celui qui utilise ip addr
, grep
et awk
pour imprimer simplement l'adresse IPv4 associée à l' wlan0
interface:
ip addr show wlan0|grep inet|grep -v inet6|awk '{print $2}'|awk '{split($0,a,"/"); print a[1]}'
Bien que ce ne soit pas la solution la plus compacte ou la plus sophistiquée, elle est (sans doute) facile à comprendre (voir l'explication ci-dessous) et à modifier à d'autres fins, telles que l'obtention des 3 derniers octets de l'adresse MAC comme ceci:
ip addr show wlan0|grep link/ether|awk '{print $2}'|awk '{split($0,mac,":"); print mac[4] mac[5] mac[6]}'
Explication: ip addr show wlan0
renvoie des informations associées à l'interface réseau nommée wlan0
, qui doivent être similaires à ceci:
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
Suivant les grep inet
filtres sur les lignes qui ne contiennent pas « iNet » (IPv4 et IPv6 configuration) et les grep -v inet6
filtres sur les lignes restantes qui font contenir « inet6 », ce qui devrait se traduire par une seule ligne comme celui - ci:
inet 172.18.18.1/24 brd 172.18.18.255 scope global noprefixroute wlan0
Enfin, le premier awk
extrait le champ "172.18.18.1/24" et le second supprime le raccourci du masque de réseau, ne laissant que l'adresse IPv4.
De plus, je pense qu'il vaut la peine de mentionner que si vous créez des scripts, il existe souvent de nombreux outils plus riches et / ou plus robustes pour obtenir ces informations, que vous voudrez peut-être utiliser à la place. Par exemple, si vous utilisez Node.js, il y en a ipaddr-linux
, si vous utilisez Ruby linux-ip-parser
, etc.
Voir aussi /unix/119269/how-to-get-ip-address-using-shell-script