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