ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Hier ist also grep
das allgegenwärtige ip
Werkzeug stdout
für eine Zeile, die sowohl unsere interessierende Schnittstelle als auch den Ausdruck "state UP" enthält (danke an @Lekensteyn, der darauf hingewiesen hat, dass ein wenig mehr Spezifität als nur erforderlich ist UP
). Wir verwenden das Argument a
als Kurzform für address
und das sollte ausreichen, um eine Auflistung aller konfigurierten Netzwerkkarten im System zu erhalten.
Ein Vorteil der Verwendung ip
könnte sein, dass sie wirklich überall verfügbar sein sollte - so konfiguriere ich zum Beispiel die Netzwerkgeräte meines Android-Telefons.
Sie :colons
werden verwendet, um partielle Übereinstimmungen zu vermeiden - auf diese Weise garantieren wir eine Übereinstimmung für eth0
im Gegensatz zu einem anderen möglichen someothereth0
oder eth007
.
Vielen Dank an @RaphaelAhrens, der mich zur Korrektheit gedrängt und meine Lösung erklärt hat.
BEARBEITEN:
Um den aktuellen Anforderungen gerecht zu werden, können Sie:
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
Die oben wird nur eine CIDR IP - Adresse drucken , wenn Ihr Ziel $if
ist hoch, eingesteckt und hat einen. Für ipv6 ist die Lösung mit nur geringfügigen Änderungen genauso einfach.
Wenn Sie nicht mögen sed
, könnten Sie ähnliche Ergebnisse mit einem anderen erzielen |pipe ... grep
und -A
dem ersten eine Kontextoption hinzufügen grep
- aber ich mag sed
.
cat /sys/class/net/ | grep eth0
sollte Ihnen einfach analysierbare Daten geben. Sie könnten auch tunsudo ethtool eth0 | grep Link