Bash ping两个主机并根据状态执行命令

时间:2017-03-15 12:28:42

标签: bash ping

我需要一个脚本来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则不执行命令。

1 个答案:

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