Ping-Skript – Host ausgefallen vs. Host nicht im Netzwerk

Ping-Skript – Host ausgefallen vs. Host nicht im Netzwerk

Ich habe das folgende Skript, mit dem ich versuche, zwischen einem Server zu unterscheiden, der ausgefallen ist, und einem Server, der nicht mehr mit dem Netzwerk verbunden ist. Wenn ich den Ping-Befehl in der Befehlszeile auf einem Server verwende, der gerade ausgefallen ist, und das $? wiedergebe, erhalte ich wie erwartet eine 1. Wenn ich den Ping-Befehl in der Befehlszeile auf einem Server verwende, der nicht mehr mit dem Netzwerk verbunden ist, und das wiedergebe, $?erhalte ich wie erwartet eine 2. Ich kann dieses Verhalten in meinem Skript anscheinend nicht erfassen. Im folgenden Skript erscheint der Server, der nicht mehr mit dem Netzwerk verbunden ist, überhaupt nicht in der badhostsAusgabedatei. Ich verwende dev null in der Ping-Zeile, da ich keine Zeilen mit unbekanntem Host in der Ausgabe haben möchte, die die Ergebnisse verfälschen würden.

#!/bin/ksh
# Take a list of hostnames and ping them; write any failures
#set -x

for x in `cat hosts`
do
ping -q -c 1 $x > /dev/null 2> /dev/null

if [ "$?" -eq 1 ];then
        echo $x is on network but down >> badhosts
elif [ "$?" -eq 2 ];then
        echo $x is not on the network >> badhosts
  fi
done

Antwort1

Ich habe mein Skript wie folgt geändert und es funktioniert.

#!/bin/ksh
# Take a list of hostnames and ping them; write any failures
set -x

for x in `cat hosts`
do
ping -c 1 $x > /dev/null 2> /dev/null
pingerr=$?

if [ $pingerr -eq 1 ]; then
        echo $x is on network but down >> badhosts
fi

if [ $pingerr -eq 2 ]; then
        echo $x is not on the network >> badhosts
fi
done

verwandte Informationen