Linux 实用小脚本系列(1)---检测批量主机是否在线
  TEZNKK3IfmPf 2023年11月14日 45 0

              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写到文件里,然后在执行脚本。然后根据自己的需求,编写定时任务。让脚本自动跑起来!!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
TEZNKK3IfmPf