我有以下腳本,我試圖區分已關閉的伺服器和不再位於網路上的伺服器。如果我在剛關閉的伺服器上的命令列上使用 ping 命令並回顯 $?正如預期的那樣,我得到了 1。如果我在不再位於網路上的伺服器上的命令列上使用 ping 命令並回顯$?
我會按預期得到 2。我似乎無法在我的腳本中捕捉這種行為。在下面的腳本中,不再位於網路上的伺服器根本不會出現在badhosts
輸出檔中。我在 ping 線路上使用 dev null,因為我不想在輸出中取得主機未知線路,這會扭曲結果。
#!/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