主机是否存活,主要是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。
第二种方法其实和第一种是一样的。
三、用函数的方法
脚本如下:
#!/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。请注意。懒得再截图了,字太多。
三种方法中我个人觉得第一种最好理解,但是最后一种是最优的,虽然效果,都是一样的。这三种方法有一个缺点就是执行的时间比较长,如果有好的方法,请大师指点。