我有以下脚本,试图区分已关闭的服务器和不再在网络上的服务器。如果我在刚刚关闭的服务器上的命令行上使用 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