Linux 实用小脚本系列(1)---检测批量主机是否在线
很可能管理的主机不是一两台,n多个主机,如果某个主机ping不通了,那么,要么主机网络不通畅,要么主机已关机,及时的发现问题,然后解决问题是运维的一个重要工作,shell脚本可以帮助你实现快速发现主机状态不正确的机器。
#!/bin/bash
NETWORK=$1
for HOST in $(seq 1 254)
do
ping -c 1 -w 1 $NETWORK.$HOST &>/dev/null && result=0 || result=1
if [ "$result" == 0 ];then
echo -e "\033[32;1m$NETWORK.$HOST is up! \033[0m"
else
echo -e "\033[31;1m$NETWORK.$HOST is down!\033[0m"
fi
done
#echo -e "\033[41;36m something here \033[0m"
# echo -e "\033[字背景颜色;字体颜色m字符串\033[0m" 32代表绿色,31代表红色
#字颜色:30-----------37 30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色
这个脚本缺点很明显,检测的是整个网段,耗费时间,而且网段内并不是所有IP都分配出去的,很多是无效的ping。
下面这个脚本指定ping哪几台主机。最多ping失败三次后,打印出失败的IP,绿色IP代表成功,红色IP代表失败。
#!/bin/bash
IP_LIST="192.168.0.17 192.168.0.18 192.168.0.19" # 将ip放进数组中
for ip in $IP_LIST; do #for循环遍历数组
num=1 #定义初始值
while [ $num -le 3 ]
do
if ping -c 1 $ip >/dev/null
then
echo -e "\033[32;1m$ip Ping is success\033[0m" #if 判断如果ping通 则返回success
break
else
FALL[$num]=$ip # 反之 则失败次数+1
let num++
fi
done
if [ -eq 3 ] # if判断如果失败次数等于3 则返回Ping is failure
then
echo -e "\033[31;1m Ping is failure!\033[0m"
unset FALL[*]
fi
done
那,上面的脚本也有问题,比较臃肿,难于编写,对吧。下面的脚本将使用shell自定义函数来做IP在线监测。仍然使用颜色绿色表示成功,红色表示失败。
#!/bin/bash
success() {
if ping -c 1 $ip >/dev/null #定义一个函数ping成功一次则显示success
then
echo -e "\033[32;1m$ip Ping is success\033[0m"
continue
fi
}
IP_LIST="192.168.0.17 192.168.0.18 192.168.0.19" # 将ip地址放到数组
for ip in $IP_LIST #循环执行三次函数成功返回success 反之返回 failure
do
success
echo -e "\033[31;1m$ip Ping is failure\033[0m"
done
那,这样的检测方式也不好,如果是十几个IP怎么办?几十个IP怎么办?上百个不同网段的IP,怎么办?都写在脚本内,脚本是不是非常臃肿了? 解决的方法也很简单,需要管理的IP地址放到一个文本文档内,用脚本读这个文本文件,依次ping,ping成功的绿色,并打印出来,ping失败的红色表示,并打印出来,这样就完美解决了以上的所有缺陷。脚本代码如下:
#!/bin/bash
success() {
if ping -c 1 $ip >/dev/null #定义一个函数ping成功一次则显示success
then
echo -e "\033[32;1m$ip Ping is success\033[0m"
continue
fi
}
while read ip
do
success
echo -e "\033[31;1m$ip Ping is failure\033[0m"
done </root/ip.txt
#====================================================================
ip.txt这个文本文档的内容:
[root@centos7 ~]# cat ip.txt
192.168.0.17
192.168.0.18
192.168.0.19
这样的话,哪些ip需要时刻监测,就把这个IP写到文件里,然后在执行脚本。然后根据自己的需求,编写定时任务。让脚本自动跑起来!!