Vous pouvez le faire de plusieurs façons. Voici un exemple :
$ cat /sys/class/net/eth0/operstate
up
ip a show ethX up
Si rien ne s'affiche, votre interface est en panne
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Alors nous voilà grep
l'omniprésent ip
stdout
de l'outil pour une ligne qui contient à la fois notre interface d'intérêt et la phrase "state UP" (merci à @Lekensteyn d'avoir souligné la nécessité d'un peu plus de spécificité que juste UP
). Nous utilisons l'argument a
comme forme courte pour address
et cela devrait être suffisant pour obtenir une liste de toutes les cartes réseau configurées dans le système.
Un avantage à utiliser ip
il se peut qu'il soit vraiment disponible partout - c'est ainsi que je configure couramment les périphériques réseau de mon téléphone Android, par exemple.
Le :colons
sont utilisés pour éviter les correspondances partielles - de cette manière, nous garantissons une correspondance pour eth0
par opposition à un someothereth0
autrement possible ou eth007
.
Merci @RaphaelAhrens de m'avoir poussé vers l'exactitude et d'avoir expliqué ma solution.
MODIFIER :
Pour gérer les exigences actuelles, vous pouvez :
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
Ce qui précède n'imprimera une adresse IP CIDR que si votre cible $if
est UP, branché, et en a un. Pour ipv6, la solution est tout aussi simple avec seulement des modifications mineures.
Si vous n'aimez pas sed
vous pourriez obtenir des résultats similaires avec un autre |pipe ... grep
et en ajoutant un -A
option de contexte au premier grep
- mais j'aime sed
.