Linux 实用小脚本系列(1)---检测批量主机是否在线

本文介绍了一种使用Shell脚本批量检测Linux主机在线状态的方法。通过不断改进脚本,实现了从检测整个网段到指定IP列表的有效监测,最后通过读取文本文件中的IP地址进行高效监测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

              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 [ ${#FALL[*]} -eq 3 ]          # if判断如果失败次数等于3 则返回Ping is failure
    then
        echo -e "\033[31;1m${FALL[1]} 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写到文件里,然后在执行脚本。然后根据自己的需求,编写定时任务。让脚本自动跑起来!!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风_END

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值