Bash ping 两台主机并根据状态执行命令
Bash ping two hosts and execute command based on status
我需要一个脚本来 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 不执行命令。
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
此脚本将创建某种二进制状态的主机列表,包括存活 (1) 或死亡 (0)。在案例块中,您可以轻松处理所有可能的组合。
如果您向第三位房东投放广告,您将得到类似于“001”或“010”或“110”的结果……。
您不需要添加所有可能的组合,只需添加您想要做出反应的内容,然后用
处理其余部分
*)
echo "don't care state of $RESULT detected"
;;
我需要一个脚本来 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 不执行命令。
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
此脚本将创建某种二进制状态的主机列表,包括存活 (1) 或死亡 (0)。在案例块中,您可以轻松处理所有可能的组合。
如果您向第三位房东投放广告,您将得到类似于“001”或“010”或“110”的结果……。
您不需要添加所有可能的组合,只需添加您想要做出反应的内容,然后用
处理其余部分*)
echo "don't care state of $RESULT detected"
;;