方式一:数组
#!/bin/bash
#使用数组做ping失败三次的判断#
while read ip
do
declare -A fail
for i in seq 3
do
ping -c1 -W1 $ip &>/dev/null
#如果一次就成功,则echo:up,跳出循环,否则数组fail[ip]++
if [
?
−
e
q
0
]
;
t
h
e
n
e
c
h
o
"
? -eq 0 ];then echo "
?−eq0];thenecho"ip is ip…"
break
else
let fail[
i
p
]
+
+
f
i
d
o
n
e
f
a
i
l
[
ip]++ fi done fail[
ip]++fidonefail[ip]的值为3,echo这个ip,down
sum=echo ${fail[$ip]}
if [ "
s
u
m
"
=
=
"
3
"
]
;
t
h
e
n
e
c
h
o
"
"
sum" == "3" ];then echo ""
sum"=="3"];thenecho""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 [
?
−
e
q
0
]
;
t
h
e
n
e
c
h
o
"
? -eq 0 ];then echo "
?−eq0];thenecho"i is up…"
break
else
let count++
fi
done
#如果count的值等于3则echo;down
if [ “
c
o
u
n
t
"
=
=
"
3
"
]
;
t
h
e
n
e
c
h
o
"
count" == "3" ];then echo "
count"=="3"];thenecho"i is down”
fi
done
方式三:函数
#!/bin/bash
#定义一个函数,Pingy一个up成功则跳出本次循环
ip_up() {
ping -c1 -W1 $ip &>/dev/null
if [
?
−
e
q
0
]
;
t
h
e
n
e
c
h
o
"
? -eq 0 ];then echo "
?−eq0];thenecho"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