Es ist besser, ifconfig
zu vermeiden zum Abrufen einer IP-Adresse in einem Skript, da es in einigen Distributionen veraltet ist (z. B. CentOS und andere, installieren Sie es nicht mehr standardmäßig).
In anderen Systemen variiert die Ausgabe von ifconfig je nach Version der Distribution (z. B. die Ausgabe/Abstände/Felder von ifconfig
unterscheidet sich beispielsweise von Debian 8 zu Debian 9).
Zum Abrufen der IP-Adresse mit ip
, auf ähnliche Weise fragen Sie:
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
Oder noch besser:
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
Oder, wie Sie fragen, "IP="
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
Schamlose Adaption der Idee von @Roman
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
Normale Ausgabe:
$ 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
Ab man ip
:
-o, -oneline
gibt jeden Datensatz in einer einzelnen Zeile aus, wobei Zeilenvorschübe durch das Zeichen '\' ersetzt werden. Dies ist praktisch, wenn Sie Datensätze mit wc(1) zählen oder die Ausgabe mit grep(1) bearbeiten möchten.
Sehen Sie sich ein Beispiel dafür an, warum ifconfig
wird nicht empfohlen:BBB:`bbb-conf --check` zeigt IP-Adressen als `inet` an - ifconfig quält
Um zu verstehen, warum ifconfig
auf dem Weg nach draußen ist, siehe Unterschied zwischen 'ifconfig'- und 'ip'-Befehlen
ifconfig
stammt von net-tools, die schon lange nicht mehr ganz mit dem Linux-Netzwerkstack mithalten können. Es verwendet auch immer noch ioctl für die Netzwerkkonfiguration, was eine hässliche und weniger mächtige Art ist, mit dem Kernel zu interagieren.
Um 2005 herum wurde ein neuer Mechanismus zur Steuerung des Netzwerkstapels eingeführt - Netlink-Sockets.
So konfigurieren Sie die Netzwerkschnittstelle iproute2
verwendet diesen Vollduplex-Netlink-Socket-Mechanismus, während ifconfig
stützt sich auf anioctl-Systemaufruf.
Awk
Lösung:
ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'
Beispielausgabe:
IP=10.0.2.15