Sie können es auf viele Arten tun. Hier ein Beispiel:
$ cat /sys/class/net/eth0/operstate
up
ip a show ethX up
Wenn nichts angezeigt wird, ist Ihre Schnittstelle ausgefallen
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Hier also grep das allgegenwärtige ip stdout des Tools für eine Zeile, die sowohl unsere interessierende Schnittstelle als auch den Ausdruck "state UP" enthält (Dank an @Lekensteyn für den Hinweis auf die Notwendigkeit von etwas mehr Spezifität als nur UP ). Wir verwenden das Argument a als Kurzform für address und das sollte ausreichen, um eine Liste aller konfigurierten Netzwerkkarten im System zu erhalten.
Ein Vorteil bei der Verwendung von ip könnte sein, dass es wirklich überall verfügbar sein sollte - so konfiguriere ich beispielsweise normalerweise die Netzwerkgeräte meines Android-Telefons.
Die :colons werden verwendet, um Teilübereinstimmungen zu vermeiden - auf diese Weise garantieren wir eine Übereinstimmung für eth0 im Gegensatz zu einem ansonsten möglichen someothereth0 oder eth007 .
Danke @RaphaelAhrens, dass du mich zur Korrektheit gebracht und meine Lösung erklärt hast.
BEARBEITEN:
Um die aktuellen Anforderungen zu bewältigen, könnten Sie:
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
Oben wird nur dann eine CIDR-IP-Adresse gedruckt, wenn Ihr Ziel $if ist ist UP, angeschlossen und hat einen. Für IPv6 ist die Lösung mit nur geringfügigen Änderungen genauso einfach.
Wenn Sie sed nicht mögen Sie könnten ähnliche Ergebnisse mit einem anderen |pipe ... grep erzielen und Hinzufügen eines -A Kontextoption zum ersten grep - aber ich mag sed .