shell脚本(3次机会探测主机存活)

                                        shell脚本给予三次机会探测主机是否存活

        之前的文章中写道使用for和while循环配合ping程序探测主机是否存活,但每个IP只ping了一次,本次结合数组等,给予三次机会探测主机存活。

同样的,文本中有我们需要探测的主机IP,我们需要给予每个IP三次机会去使用ping程序。

[root@localhost ~]# cat ip.txt 

47.102.121.235

47.102.121.232

47.102.121.278

47.102.121.2


方法一:利用数组做三次失败的判断

扫描二维码关注公众号,回复: 6542175 查看本文章
#!/bin/bash
###############################
#使用数组做ping失败三次的判断#
###############################
#大循环循环IP
while read ip
do
#定义关联数组fail
    declare -A fail
#小循环循环ping的次数
    for i in `seq 3`
    do
        ping -c1 -W1 $ip &>/dev/null
#如果一次就成功,则echo:up,跳出循环,否则数组fail[ip]++
        if [ $? -eq 0 ];then
        echo "$ip is ip...."
        break
        else
        let fail[$ip]++
        fi
    done
#定义fail的次数,echo一个值,如果失败三次,那么数组索引fail[$ip]的值为3,echo这个ip,down
        sum=`echo ${fail[$ip]}`
        if [ "$sum" == "3" ];then
        echo ""$ip is down.....
        fi
done < ip.txt


方法二:判断变量的值

#!/bin/bash
###############################
#通过变量的值,实现三次失败的判定
###############################
#使用for大循环遍历ip地址
for i in `cat $(pwd)/ip.txt`
do
#定义变量count为0,每次大循环都重置count的值
    count=0
#小循环循环次数
    for j in `seq 3`
    do
    ping -c1 -W1 $i &>/dev/null
#如果成功echo;up,不成功则count++
        if [ $? -eq 0 ];then
        echo "$i is up....."
        break
        else
        let count++
        fi
    done
 #如果count的值等于3则echo;down
    if [ "$count" == "3" ];then
    echo "$i is down"
    fi
done


方法三:通过函数

#!/bin/bash
#############
#定义一个函数,Pingy一个up成功则跳出本次循环
ip_up() {
        ping -c1 -W1 $ip &>/dev/null
        if [ $? -eq 0 ];then
                echo "$ip is up....."
        continue
        fi
}
#while循环拿到IP,执行函数,三次ping失败则echo;down
while read ip
do
        ip_up
        ip_up
        ip_up
        echo "$ip is donw....."
done < ip.txt


猜你喜欢

转载自blog.51cto.com/13760226/2410626