• 批量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 "33[32m${ip_preffix}.${ip_network}.${ip_host} yes33[0m" || echo -e "33[32m${ip_preffix}.${ip_network}.${ip_host} no33[0m" &>/dev/null'
    
    # Ip格式错误提示
    function ip_format_error()
    {
    echo -e "33[31mIp format is incorrect.
    Ip format: ping_batch.sh -r ip-ip.
    simple: ping_batch.sh -r 192.168.1.1-192.168.2.133[0m"
    exit
    }
    
    # 传入参数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 "33[31m Ip 192.168.1.1-192.168.2.1
    192.168==192.168
    Subnet is 16 bits.33[0m"
    exit
    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 "33[31m执行默认配置33[0m"
    ;;
    esac
    
    # 模拟线程,超过配置值,等待
    function thread_wait()
    {
    if [[ $(ps -ef|wc -l) -gt $MAX_THREAD ]]
    then
    sleep 1
    thread_wait
    fi
    }
    
    # 内存保留检查,小于设定值则等待
    function free_check()
    {
    if [[ $(free -m|grep 'Mem:'|awk '{print $4}') -lt MIN_MEM ]]
    then
    sleep 2;
    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
    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_check
    (eval "${PING_SCRIPT}") &
    done
    done
    #!/bin/bash
    # Ping Batach
    ip_prefix="192.168"
    ip_network_range="1-2"
    ip_network_host_range="1-254"
    
    function ping_batch()
    {
      ip="$1"
      script_ping='ping -c 2 '$ip'&>/dev/null;[[ $? -eq 0 ]] && echo -e "33[32m'$ip' yes33[0m" || echo -e "33[36m'$ip' no33[0m">/dev/null'
      eval $script_ping &
    }
    for i in `seq $(echo $ip_network_range|awk -F '-' '{print $1}') $(echo $ip_network_range|awk -F '-' '{print $2}')`;do for j in `seq $(echo $ip_network_host_range|awk -F '-' '{print $1}') $(echo $ip_network_host_range|awk -F '-' '{print $2}')`;do ping_batch "${ip_prefix}.${i}.${j}";done;done
  • 相关阅读:
    Sql日期时间格式转换
    基于现有数据库的Code First模式迁移更新数据库
    EF Code First Migrations数据库迁移
    IE6 IE7 ‘JSON’ 未定义
    解决iis7只能上传30M文件的限制
    在ASP.NET MVC中使用Juqery实现页面局部刷新
    asp.net mvc3 利用Ajax实现局部刷新
    CS0234: 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Html、Ajax”(是否缺少程序集引用?)
    陨石坑之webapi使用filter
    Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码
  • 原文地址:https://www.cnblogs.com/tianyuanchen/p/11371751.html
Copyright © 2020-2023  润新知