У меня есть следующий скрипт, в котором я пытаюсь отличить сервер, который не работает, от сервера, который больше не находится в сети. Если я использую команду 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