批量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脚本的主要内容,如果未能解决你的问题,请参考以下文章
sh 一个bash脚本,通过todo.txt中列出的记录ID执行Internet Archive(archive.org)资料的批量下载
sh Bash脚本,用于在RRD中存储ping数据并绘制该数据