shell脚本编写-测试同一网段内主机是否在线

除了可以使用ansible自动化运维工具判断主机是否在线以外,还可以通过编写Shell脚本来实现。

1、编写脚本

#! /bin/bash
#测试192.168.81.0/24网段中哪些主机处于开机状态,哪些主机处于关机状态

# #方法一:使用for循环判断
# for i in {1..254}
# do
#     ping -c 2 $i 0.3 -w 1 192.168.81.$i &>/dev/null
    
#     if [ $? -eq 0 ];
#     then 
#         echo " 192.168.81.81.$i is up"
#     else    
#          echo " 192.168.81.$i is down "
#     fi 
# done



# #方法二:使用while循环判断
# i=1
# while [ $i -le 254 ]
# do
#    ping -c 2 -i 0.3 -w 1 192.168.81.$i &>/dev/null
#    if [ $? -eq 0 ]
#    then 
#       echo " 192.168.81.$i is up "
#     else
#        echo " 192.168.81.$i is down "
#     fi 
#     let i++
# done 




#方法三:使用状态(多进程)判断
#自定义一个函数 
myping ( ) {
    ping -c 2 -i 0.3 -w 1 $1 &>/dev/null
    if [ $? -eq 0 ];
    then 
        echo "192.168.81.$1 is up "
    else 
        echo " 192.168.81.$i is down "
    fi 
}
# $1 是函数的第一个参数,在这表示要传入的IP地址参数

for i in {1..254}
do
   myping "$i"  
done 



 





2、运行checknetwork.sh脚本 

3、总结

通过对比发现,使用which循环判断速度最慢,使用函数的方法判断速度最快。

`while` 循环和 `for` 循环的操作对象都是单个 IP 地址,每次循环都需要进行一次完整的 ICMP 请求及响应过程,速度相对较慢。
而使用函数并发地进行 ICMP 请求,可以同时测试多个 IP 地址的响应情况,从而提高测试速度。同时,使用函数操作也避免了循环时进行相同命令行的重复创建和销毁的过程,使网络延迟减小。
通过并发执行多个 ICMP 请求,可以让测试工作更快地完成。当测试的主机数量很大时,比如超过 1000 台,这种并发的方式会更为明显地展现出它的优势。当然,这种方式需要一些多线程或多进程的技巧来实现,例如使用函数、运行后台进程等等。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值