65. 判断主机存活,给三次机会

不太成功 

wesley@ubuntu:~/shell$ cat ping01.sh 
#!/bin/bash
ip_list="192.168.146.1 192.169.146.128 192.168.146.137"
for ip in $ip_list
do
        for count in {1..3}
        do
                ping -c1 -W1 $ip &>/dev/null
                if [ $? -eq 0 ];then
                        echo "$ip ping is ok."
                        break
                else
                        echo "$ip ping is failure: $count"
                        fail_count[$count]=$ip
                fi
        done
        if [ ${#fail_coun[*]} -eq 3 ];then
                echo "${fail_count[1]} ping is failure!"
                unset fail_count[*]
        fi
done

 主机是否存活,主要是ping它的ip地址,如果能够ping通则表示主机在网络中存活,但是我们不能一棍子打死,只给一次机会,一次不通就判定主机网络不通,有可能是因为网络质量的关系,偶尔丢包,这个不能断定主机的存活状态,次实验连续三次失败才断定主机非存活。

一、失败次数的值判定方法

脚本如下:

#!/bin/bash
net="192.168.0."
for i in {1..254};do
        for count in {1..3};do
                ping -c1 -W1 $net$i &> /dev/null
                if [ $? -eq 0 ];then
                        echo "$net$i is live !"
                        break
                else
                        if [ $count -eq 3 ];then                       #通过循环的次数来确定失败的次数,这里如果已经循环到第3次了,就表示连续3次没有ping通,则判定主机died
                                echo "$net$i is died !"
                        fi
                fi
        done

done

 

 二、通过变量的方式

脚本如下:

#!/bin/bash
while read ip
do
        fail_count=0                                                #定义一个变量并富裕一个初始值0,用来记录ping失败的次数。
        for i in {1..3};do
                ping -c1 -w1 $ip &> /dev/null
                if [ $? -eq 0 ];then
                        echo "$ip is live !"
                        break
                else
                        let fail_count++                            #每ping失败一次就给fail_count变量自加1
                fi
        done
        if [ $fail_count -eq 3 ];then                  #判断失败次数如果等于3,就认定这个主机地址died。
                echo "$ip is died !"
        fi
done<ip.txt                                                         #输入重定向的方式获取ip地址,这个脚本就需要在脚本文件的当前目录存在一个ip.txt的文件,里面放的是要测试的ip地址,一行一个ip。
wesley@ubuntu:~/shell$ cat test.sh 
#!/usr/bin/bash
while read ip
do 
        fail_count=0
        for i in {1..3}
        do
                ping -c1 -W1 $ip &>/dev/null
                if [ $? -eq 0 ];then
                        echo "$ip live"
                        break
                else
                        echo "$ip ping is failure: $i"
                        let fail_count++
                fi
        done
        if [ $fail_count -eq 3 ];then
                echo "$ip ping is failure!"
        fi
done <ip.txt

 

 第二种方法其实和第一种是一样的。

三、用函数的方法

脚本如下:

#!/bin/bash
ping_sucess() {
        ping -c1 -W1 $ip &> /dev/null
        if [ $? -eq 0 ];then
                echo "$ip is live !"
                continue
        fi
}
while read ip
do
        ping_sucess
        ping_sucess
        ping_sucess
     echo "$ip is died !"
done < ip.txt

下方图片中少了最后一个echo。请注意。懒得再截图了,字太多。

 三种方法中我个人觉得第一种最好理解,但是最后一种是最优的,虽然效果,都是一样的。这三种方法有一个缺点就是执行的时间比较长,如果有好的方法,请大师指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值