ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Hier ist also grepdas allgegenwärtige ipWerkzeug stdoutfü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 aals Kurzform für addressund das sollte ausreichen, um eine Auflistung aller konfigurierten Netzwerkkarten im System zu erhalten.
Ein Vorteil der Verwendung ipkönnte sein, dass sie wirklich überall verfügbar sein sollte - so konfiguriere ich zum Beispiel die Netzwerkgeräte meines Android-Telefons.
Sie :colonswerden verwendet, um partielle Übereinstimmungen zu vermeiden - auf diese Weise garantieren wir eine Übereinstimmung für eth0im Gegensatz zu einem anderen möglichen someothereth0oder 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 $ifist 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 ... grepund -Adem ersten eine Kontextoption hinzufügen grep- aber ich mag sed.
cat /sys/class/net/ | grep eth0sollte Ihnen einfach analysierbare Daten geben. Sie könnten auch tunsudo ethtool eth0 | grep Link