скрипт ping - хост не работает или хост не в сети

скрипт ping - хост не работает или хост не в сети

У меня есть следующий скрипт, в котором я пытаюсь отличить сервер, который не работает, от сервера, который больше не находится в сети. Если я использую команду ping в командной строке на сервере, который только что не работает, и вывожу $?, я получаю 1, как и ожидалось. Если я использую команду ping в командной строке на сервере, который больше не находится в сети, и вывожу $?2, как и ожидалось. Кажется, я не могу зафиксировать это поведение в своем скрипте. В скрипте ниже сервер, который больше не находится в сети, вообще не отображается в badhostsвыходном файле. Я использую dev null в строке ping, так как не хочу получать строки host unknown на выходе, которые исказят результаты.

#!/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

решение1

Я изменил свой скрипт следующим образом, и это работает.

#!/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

Связанный контент