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 badhosts
Ausgabedatei. 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