批量Ping执行Bash脚本

#!/bin/bash
# Ping Batch Script

# 连接超时时间
TMOUT=3
# 最大线程数
MAX_THREAD=4000
# 保留内存大小
MIN_MEM=400

# 默认ip配置,可通过 -r ip-ip指定,格式: ping_batch.sh -r 192.168.1.1-192.168.2.254
# ip前缀
ip_preffix="192.168"
# 16位主机范围 192.168.1-192.168.2
ip_network_range="1-2"
# ping范围 192.168.1.1-192.168.2.254
ip_host_range="1-254"

# ping脚本
PING_SCRIPT=‘ping -c 1 ${ip_preffix}.${ip_network}.${ip_host} &> /dev/null;[[ $? -eq 0 ]] && echo -e "\033[32m${ip_preffix}.${ip_network}.${ip_host} yes\033[0m" || echo -e "\033[32m${ip_preffix}.${ip_network}.${ip_host} no\033[0m" &>/dev/null‘

# Ip格式错误提示
function ip_format_error()
{
echo -e "\033[31mIp format is incorrect.\nIp format: ping_batch.sh -r ip-ip.\nsimple: ping_batch.sh -r 192.168.1.1-192.168.2.1\033[0m"
}

# 传入参数Ip格式判断及格式化
case "$1" in
‘-r‘)
shift
ip_start=`echo $1|awk -F‘-‘ ‘{print $1}‘`
ip_end=`echo $1|awk -F‘-‘ ‘{print $2}‘`
echo $ip_start|grep -E "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])" &>/dev/null
[[ $? -eq 0 ]] || ip_format_error
echo $ip_end|grep -E "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])" &>/dev/null
[[ $? -eq 0 ]] || ip_format_error
ip_start_preffix=`echo $ip_start|awk -F‘.‘ ‘{print $1"."$2}‘`
ip_end_preffix=`echo $ip_end|awk -F‘.‘ ‘{print $1"."$2}‘`
if [[ "$ip_start_preffix" == "$ip_end_preffix" ]]
then
ip_preffix=$ip_start_preffix
else
echo -e "\033[31m Ip 192.168.1.1-192.168.2.1\n192.168==192.168\nSubnet is 16 bits.\033[0m"
fi
ip_network_range_start=`echo $ip_start|awk -F‘.‘ ‘{print $3}‘`
ip_network_range_end=`echo $ip_end|awk -F‘.‘ ‘{print $3}‘`
ip_host_range_start=`echo $ip_start|awk -F‘.‘ ‘{print $4}‘`
ip_host_range_end=`echo $ip_end|awk -F‘.‘ ‘{print $4}‘`
ip_network_range="${ip_network_range_start}-${ip_network_range_end}"
ip_host_range="${ip_host_range_start}-${ip_host_range_end}"
;;
*)
echo -e "\033[31m参数错误,格式: ping_batch.sh -r 192.168.1.1-192.168.2.254\033[0m"
;;
esac

# 线程超过配置值,等待
function thread_wait()
{
sleep 1
if [[ $(ps -ef|wc -l) -gt $MAX_THREAD ]]
then
thread_wait
fi
}

# 内存保留检查,小于设定值则等待
function free_check()
{
sleep 2;
if [[ $(free -m|grep ‘Mem:‘|awk ‘{print $4}‘) -lt MIN_MEM ]]
then
free_check
fi
}

# 格式化Ip并执行ping脚本
for ip_network in `seq $(echo $ip_network_range|awk -F ‘-‘ ‘{print $1}‘) $(echo $ip_network_range|awk -F ‘-‘ ‘{print $2}‘)`
do
[[ $(ps -ef|wc -l) -gt $MAX_THREAD ]] && thread_wait
for ip_host in `seq $(echo $ip_host_range|awk -F ‘-‘ ‘{print $1}‘) $(echo $ip_host_range|awk -F ‘-‘ ‘{print $2}‘)`
do
[[ $(free -m|grep ‘Mem:‘|awk ‘{print $4}‘) -lt MIN_MEM ]] && free_check
(eval "${PING_SCRIPT}") &
done
done

原文地址:https://www.cnblogs.com/tianyuanchen/p/11371751.html

时间: 2024-08-30 08:07:49

批量Ping执行Bash脚本的相关文章

Nginx支持web界面执行bash脚本

一直以来都是在终端执行shell等脚本,那web界面是否也可以这样,当然也是可以的本文以centos 6为例安装配置 安装spawn-fcgiwget https://github.com/lighttpd/spawn-fcgi/archive/spawn-fcgi-1.6.4.zipunzip spawn-fcgi-1.6.4.zip && rm spawn-fcgi-1.6.4.zip mv spawn-fcgi-spawn-fcgi-1.6.4/ spawn-fcgicd spawn

一键批量ping任意ip段的存活主机

一键批量ping任意ip段的存活主机 今晚继续我们的电脑批处理系列教程.如果想知道自己的小区宽带或局域网,甚至外网任意某一ip段,目前有多少人同时在上网肿么办呢?可能大家想到的一定是找工具什么的.其实不然,利用Windows内置的批处理功能完全可以实现批量ping查找指定网段存活主机的目的! @echo offcolor etitle 批处理扫网段主机echo.@for /f "tokens=1-4 delims=." %%i in (ip.txt) do (@for /l %%n i

shell 编写脚本批量ping ip

最近做机房带宽检测.最近编写一个shell脚本批量ping各地机房的ip,返回失败率及平均响应时间 #!/bin/bash log=$1.log echo -n "" > $log for i in `cat $1` do   /bin/ping -s 1000 -f -c 100  $i > ip.txt echo "`curl ip.cn?ip=$i`  `cat ip.txt | grep transmitted  | gawk '{print $6}'` 

Linux批量ping脚本

根据鸟哥的ping脚本,我重新修改了一下.用到的知识有:read.Linux按行读取.shell输出效果调整等 其中Linux按行读取文件比较重要,可参看文下链接 1 脚本功能: 批量ping当前路径下文件里面的ip地址,ip地址必须一行行填写 2 注意: 请根据提示运行脚本,确保脚本有执行权限,不能在window上运行 #!/bin/bash # Program # Use ping command to check the network's PC state. # History # 20

expect 批量拷贝key文件并且批量执行简单脚本

一.expect简介 expect是一种能够按照脚本内容里面设定的方式与交互式程序进行"会话"的程序.根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及 什么是正确的应答. 它是一种可以提供"分支和嵌套结构"来引导程序流程的解释型脚本语言. shell功能很强大,但是不能实现有交互功能的多机器之前的操作,例如ssh和ftp.而expect可以帮助我们来实现. 二.安装expect软件包 #yum install expect -y 注:使用expect批

expect脚本同步文件、指定host和要同步的文件、构建文件分发系统、批量远程执行命令

expect脚本同步文件 1.自动同步文件 [[email protected] shell]# vi 4.expect 增加如下脚本内容: #!/usr/bin/expect set passwd "123456" spawn rsync -av [email protected]:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:" { send &

Bash脚本实现批量作业并行化

在Linux下运行作业时, 经常会遇到以下情形: 有大量作业需要运行,完成每个作业所需要的时间也不是很长. 如果我们以串行方式来运行这些作业,可能要耗费较长的时间; 若采用并行方式运行则可以大大节约运行时间.再者, 目前的计算机绝大部分都是多核架构, 要想充分发挥它们的计算能力也需要并行化.总结网上看到的资料,利用Bash脚本,可以采用下面几种方法实现批量作业的并行化.注意,下面论述中将不会区分进程和线程,也不会区分并行和并发. 1. 采用GNU的paralle程序 parallel是GNU专门

expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统、批量远程执行

20.31 expect脚本同步文件 自动同步文件 #!/usr/bin/expect set passwd "rootroot" spawn rsync -av [email protected]:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r"} } expect eof 执行 [[ema

expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

20.31 expect脚本同步文件#!/usr/bin/expectset passwd "liang.123"spawn rsync -av [email protected]:/tmp/12.txt /tmp/ 将远程的/tmp/12.txt同步到本地的机器上 expect {"yes/no" { send "yes\r"} 第一次会提示yes或no"password:" { send "$passwd\r&q