for循环实现
vim netstatus_for.sh
#!/bin/bash
for i in {1..254}
do
ping -c2 -i0.3 -W1 192.168.1.$i &>/dev/null #测试2次间隔0.3秒
if [ $? -eq 0 ];then
echo "192.168.1.$i is up"
else
echo "192.168.1.$i is down"
fi
done
while循环实现
vim netstatus_while.sh
#!/bin/bash
i=1
while [ $i -le 254 ]
do
ping -c2 -i0.3 -W1 192.168.1.$i &>/dev/null
if [ $? -eq 0 ];then
echo "192.168.1.$i is up"
else
echo "192.168.1.$i is down"
fi
let i++
done
这个两个脚本有个问题,按照脚本看无论哪个循环的i取值都会从1一直到254,不太符合实际生产用,这里只是简单的了解一下for/while循环的使用。
多进程版本
vim netstatus.sh
#!/bin/bash
#定义一个函数,ping某台主机,并检测主机的存活状态
myping(){
ping -c2 -i0.3 -W1 $1 &>/dev/null
if [ $? -eq 0 ];then
echo "$1 is up"
else
echo "$1 is down"
fi
}
for i in {1..254}
do
myping 192.168.1.$i &
done
wait
#使用&符号,将执行的函数放入后台执行,wait 等待所有进程结束后退出脚本
这个脚本的好处在于不需要等待ping第一台主机的回应就可以继续并发ping第二胎主机,一次类推
由于ping的主机比较多,会导致刷屏的情况出现,我们可以在执行脚本时将输出内容直接输入到文本里面或日志里面
# sh netstatus.sh > /var/log/netcheck.log