Il vaut mieux éviter d'utiliser ifconfig
pour obtenir une adresse IP dans un script car il est déconseillé dans certaines distributions (par exemple CentOS et autres, ne l'installez plus par défaut).
Dans d'autres systèmes, la sortie d'ifconfig varie selon la version de la distribution (par exemple, la sortie / l'espacement / les champs de ifconfig
diffèrent de Debian 8 à Debian 9, par exemple).
Pour obtenir l'adresse IP avec ip
, de la même manière, 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 } '
Adapter 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
De man ip
:
-o, -oneline affiche
chaque enregistrement sur une seule ligne, en remplaçant les sauts de ligne par le caractère '\'. C'est pratique lorsque vous souhaitez 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` montrant les adresses IP comme` inet` - ifconfig woes
Pour comprendre pourquoi ifconfig
est sur le point de sortir, voir Différence entre les commandes «ifconfig» et «ip»
ifconfig
provient de net-tools, qui n'a pas été en mesure de suivre pleinement la pile réseau Linux depuis longtemps. Il utilise également ioctl pour la configuration du réseau, qui est un moyen laid et moins puissant 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, il iproute2
utilise ce mécanisme de socket netlink en duplex intégral, tout en ifconfig
s'appuyant sur un appel système ioctl.