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