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
.