Tengo el siguiente script en el que intento diferenciar entre un servidor que está inactivo y un servidor que ya no está en la red. Si uso el comando ping en la línea de comando en un servidor que está inactivo y hago eco del comando $? Obtengo un 1 como se esperaba. Si uso el comando ping en la línea de comando en un servidor que ya no está en la red y hago eco, $?
obtengo un 2 como se esperaba. Parece que no puedo capturar este comportamiento en mi guión. En el siguiente script, el servidor que ya no está en la red no aparece en el badhosts
archivo de salida. Estoy usando dev null en la línea de ping porque no quiero que aparezcan líneas desconocidas del host en la salida, lo que distorsionará los resultados.
#!/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
Respuesta1
Modifiqué mi script de la siguiente manera y esto funciona.
#!/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