ping スクリプト - ホストがダウンしている vs ホストがネットワーク上にない

ping スクリプト - ホストがダウンしている vs ホストがネットワーク上にない

ダウンしているサーバーとネットワーク上になくなったサーバーを区別しようとしている次のスクリプトがあります。ダウンしたばかりのサーバーに対してコマンド ラインで 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

関連情報