Je dois vérifier avec un script si eth0
est configuré. Si c'est le cas, le script ne fera rien. Sinon, il commencera wlan0
. (Je ne veux pas les deux eth0
et wlan0
pour être en même temps).
Quelle serait la façon la plus simple de vérifier si eth0
est déjà en place?
J'utilise Debian Wheezy
Je voudrais non seulement vérifier que le câble dans eth0
est branché, mais plutôt que l'interface est configurée (c'est-à-dire qu'elle a un ensemble d'adresses IP statiques ou qu'elle a reçu une adresse IP DHCP). Si le câble est branché, mais eth0
n'est pas configuré correctement, je veux démarrer wlan0
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 alors votre interface est en panne
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Nous voici donc grep
l'omniprésent ip
outil stdout
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 abrégée pour address
et cela devrait être assez pour obtenir une liste de toutes les cartes réseau configurées dans le système.
Un avantage à utiliser ip
pourrait être qu'il devrait vraiment être disponible partout - c'est ainsi que je configure couramment mon Android téléphone les périphériques réseau, par exemple.
Le :colons
sont utilisés pour éviter les correspondances partielles - de cette façon, nous garantissons une correspondance pour eth0
par opposition à un autre possible someothereth0
ou eth007
.
Merci @RaphaelAhrens de m'avoir poussé vers l'exactitude et d'expliquer ma solution.
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 à la première grep
- mais j'aime sed
.
Les autres méthodes ne fonctionnent pas, mais celle-ci le fait (sur Ubuntu au moins):
while true; do
ip route | grep "linkdown"
if [ $? -eq 0 ]; then
sleep 1 # network not yet up
else
break # network up
fi
done