我需要一个脚本来ping两个主机并根据它们的状态执行一个命令。
即
#!/bin/bash
HOSTS="1.1.1.1 2.2.2.2"
for myHost in $HOSTS
do
fping $myHost > /tmp/ping.log
if [ $(grep -c "1.1.1.1 is unreachable" "/tmp/echo.log") -eq 1 ]; then
echo "1.1.1.1 is down"
else
if [ $(grep -c "2.2.2.2 is alive" "/tmp/echo.log") -eq 1 ]; then
echo "2.2.2.2 is alive"
fi
fi
done
然后我需要知道如果1.1.1.1没有响应,2.2.2.2然后执行命令,反之亦然,即如果1.1.1.1响应而2.2.2.2则不执行命令。
答案 0 :(得分:1)
HOSTS="127.0.0.1 227.1.2.3"
RESULT=""
for HOST in $HOSTS; do
if fping $HOST > /dev/null 2>&1; then
RESULT="${RESULT}1"
else
RESULT="${RESULT}0"
fi
done
echo "RESULT=$RESULT"
case "$RESULT" in
00)
echo "host 1 dead, host 2 dead"
;;
01)
echo "host 1 dead, host 2 alive"
;;
10)
echo "host 1 alive, host 2 dead"
;;
11)
echo "host 1 alive, host 2 alive"
;;
esac
此脚本将创建主机列表alive(1)或dead(0)的某种二进制状态。在case块中,您可以轻松处理所有可能的组合。
如果你是第三个主持人,你会得到类似“001”或“010”或“110”......的结果。
您无需添加所有可能的组合,只需添加您想要做出的反应并使用
处理其余部分。*)
echo "don't care state of $RESULT detected"
;;