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"
    ;;