Je veux écrire un script qui vérifie si l'un des périphériques du réseau, qui devrait être en ligne toute la journée, est vraiment en ligne. J'ai essayé d'utiliser le ping, mais
if [ "`ping -c 1 some_ip_here`" ]
then
echo 1
else
echo 0
fi
donne 1
peu importe si j'entre une adresse IP valide ou invalide. Comment puis-je vérifier si une adresse spécifique (ou, au mieux, l'un des périphériques de la liste des adresses IP) s'est déconnectée?
Ping renvoie différents codes de sortie en fonction du type d'erreur.
ping 256.256.256.256 ; echo $?
# 68
ping -c 1 127.0.0.1 ; echo $?
# 0
ping -c 1 192.168.1.5 ; echo $?
# 2
0 signifie hôte accessible
2 signifie inaccessible
Vous n'avez pas besoin des backticks dans la déclaration if. Vous pouvez utiliser ce chèque
if ping -c 1 some_ip_here &> /dev/null
then
echo 1
else
echo 0
fi
La commande if vérifie le code de sortie de la commande suivante (le ping). Si le code de sortie est zéro (ce qui signifie que la commande a été sortie avec succès), le bloc then sera exécuté. S'il renvoie un code de sortie non nul, le bloc else sera exécuté.
Il existe une version avancée de ping - "fping", qui permet de définir le délai d’expiration en millisecondes.
#!/bin/bash
IP='192.168.1.1'
fping -c1 -t300 $IP 2>/dev/null 1>/dev/null
if [ "$?" = 0 ]
then
echo "Host found"
else
echo "Host not found"
fi
Je peux penser à un one-liner comme celui-là pour courir
ping -c 1 127.0.0.1 &> /dev/null && echo success || echo fail
Remplacez 127.0.0.1 par IP ou nomhôte, remplacez les commandes echo par ce qui doit être fait dans les deux cas.
Le code ci-dessus va réussir, essayez peut-être avec une adresse IP ou un nom d’hôte que vous savez qui n’est pas accessible.
Comme ça:
ping -c 1 google.com &> /dev/null && echo success || echo fail
et ça
ping -c 1 lolcatz.ninja &> /dev/null && echo success || echo fail
Pour votre information, je viens de faire quelques tests en utilisant la méthode ci-dessus et si nous utilisons multi-ping (10 requêtes)
ping-c10 8.8.8.8 &>/dev/null; echo $?
le résultat de la commande multi ping sera "0" si au moins un des résultats de ping est accessible, et "1" si toutes les demandes de ping sont inaccessibles.
up=`fping -r 1 $1 `
if [ -z "${up}" ]; then
printf "Host $1 not responding to ping \n"
else
printf "Host $1 responding to ping \n"
fi