Eu tenho o seguinte script onde estou tentando diferenciar entre um servidor que está inativo e um servidor que não está mais na rede. Se eu usar o comando ping na linha de comando em um servidor que está inativo e ecoar o $? Eu recebo um 1 como esperado. Se eu usar o comando ping na linha de comando em um servidor que não está mais na rede e repetir, $?
recebo 2 conforme o esperado. Não consigo capturar esse comportamento em meu script. No script abaixo, o servidor que não está mais na rede não aparece no badhosts
arquivo de saída. Estou usando o dev null na linha de ping, pois não quero obter as linhas desconhecidas do host na saída, o que distorcerá os 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
Responder1
Modifiquei meu script da seguinte maneira e funcionou.
#!/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