Il vaut mieux éviter d'utiliser ifconfig
pour obtenir une adresse IP dans un script car elle est obsolète dans certaines distributions (par exemple CentOS et autres, ne l'installez plus par défaut).
Dans d'autres systèmes, la sortie de ifconfig varie en fonction de la version de la distribution (par exemple, la sortie/l'espacement/les champs de ifconfig
diffère de Debian 8 à Debian 9, par exemple).
Pour obtenir l'adresse IP avec ip
, de la même manière que vous demandez :
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
Ou mieux encore :
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
Ou, comme vous le demandez "IP="
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
Adaptant sans vergogne l'idée de @Roman
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
Sortie normale :
$ ip -o -4 address show
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global eth0\ valid_lft forever preferred_lft forever
À partir de man ip
:
-o, -oneline
sortir chaque enregistrement sur une seule ligne, en remplaçant les sauts de ligne par le caractère '\'. C'est pratique lorsque vous voulez compter les enregistrements avec wc(1) ou grep(1) la sortie.
Voir un exemple de pourquoi ifconfig
n'est pas conseillé :BBB :`bbb-conf --check` affichant les adresses IP comme `inet` - ifconfig woes
Pour comprendre pourquoi ifconfig
est sur le point de disparaître, voir Différence entre les commandes 'ifconfig' et 'ip'
ifconfig
vient de net-tools, qui n'a pas été en mesure de suivre complètement la pile réseau Linux depuis longtemps. Il utilise également toujours ioctl pour la configuration réseau, qui est une manière laide et moins puissante d'interagir avec le noyau.Vers 2005, un nouveau mécanisme de contrôle de la pile réseau a été introduit - les sockets netlink.
Pour configurer l'interface réseau
iproute2
utilise ce mécanisme de socket netlink en duplex intégral, tandis queifconfig
s'appuie sur l'appel système anioctl.
Awk
solution :
ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'
Exemple de sortie :
IP=10.0.2.15