インタラクティブな同時ping検出スクリプト

1961 ワード

 
  
#!/bin/bash
#********************************#
#2013-01-11 17:00:00 wanggy exp  #
#note:ping monitor               #
#********************************#
set -u
ping_fun()
{
    d_network=192.168.1
    echo -n "input the network(default $d_network):"
    read network
    : ${network:=$d_network}
    echo "network:$network"
    d_hostip_beg=1
    d_hostip_end=254
    echo -n "input the hostip(default $d_hostip_beg $d_hostip_end):"
    read hostip_beg hostip_end
    : ${hostip_beg:=$d_hostip_beg}
    : ${hostip_end:=$d_hostip_end}
    echo "hostip_beg:$hostip_beg"
    echo "hostip_end:$hostip_end"
            if [ $hostip_beg -gt $hostip_end ];then
                    echo "$hostip_beg greater than $hostip_end!!!"
                    exit 0
            fi
    : >pinglog
    : >pingerrlog
    ping_count=3
    for ((hostip=$hostip_beg;hostip<=$hostip_end;hostip++));do
    {
            host=$network.$hostip
            echo " ping $host"
            ping -c $ping_count $host >/dev/null
                    if [ $? = 0 ];then
                            echo "$host is up"
                            echo "$host is up" >>pinglog
                    else
                                    echo "$host is down"
                                    echo "$host is down" >>pingerrlog
                    fi
}&
   done
wait
}
main()
{
    echo "---- ping ----"
    ping_fun
}
main
exit 0