2017-03-15 34 views
0

我需要一个脚本来ping两台主机并根据其状态执行命令。Bash 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
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" 
    ;; 
+0

处理它的其余部分这正是我千恩万谢后什么。 – Lurch