批量Ping执行Bash脚本

Posted tianyuanchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批量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

 

以上是关于批量Ping执行Bash脚本的主要内容,如果未能解决你的问题,请参考以下文章

在 bash 脚本中使用 ping 检查主机可用性

sh 一个bash脚本,通过todo.txt中列出的记录ID执行Internet Archive(archive.org)资料的批量下载

一个简单的shell小脚本,批量ping主机ip的存活状态

sh Bash脚本,用于在RRD中存储ping数据并绘制该数据

在 bash 脚本的 if 语句中使用 traceroute

shell脚本批量获取内网主机的MAC地址