script de ping: host caído versus host no en la red

script de ping: host caído versus host no en la red

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 badhostsarchivo 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

información relacionada