不太成功
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。请注意。懒得再截图了,字太多。
三种方法中我个人觉得第一种最好理解,但是最后一种是最优的,虽然效果,都是一样的。这三种方法有一个缺点就是执行的时间比较长,如果有好的方法,请大师指点。