您的位置:首页 > 运维架构 > Shell

shell编程 测试单个主机或网段主机存活

2012-09-26 21:44 197 查看
今天中午的作业,写shell脚本,使用ping判断指定IP或者IP端内的主机存活。

只接受规定的IP格式输入和IP段输入(例如:192.168.2.88 或 192.168.2.)注意,写IP段的时候后面有个点...脚本简陋...看官将就一下吧;上代码:

#!/bin/bash

read -p "Please input ip:(192.168.0.22) or (192.168.0.)" Ip

Test=`echo $Ip|grep "\<[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\$"`

Test1=`echo $Ip|grep "\<[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.\$"`

#echo "a IP is: $Test"

#echo "IP.is $Test1"

if [[ -z $Test && -z $Test1 ]];then

echo "input error!"

exit 1

elif [[ -n $Test ]];then

for i in `seq 1 4`

do

Cut=`echo $Test|cut -d"." -f$i`

if [ $i -eq 1 ];then

if [ $Cut -gt 223 -o $Cut -lt 1 ];then

echo "input $Test ---->> $Cut invalid"

exit 2

fi

else

if [ $Cut -gt 254 ];then

echo "input $Test ---->> $Cut invalid"

exit 2

fi

fi

done

if ping -c 2 -W 1 $Test &> /dev/null ;then

echo "Have $Test"

else

echo "No $Test"

fi

else

for i in `seq 1 3`

do

Cut=`echo $Test1|cut -d"." -f$i`

if [ $i -eq 1 ];then

if [ $Cut -gt 223 -o $Cut -lt 1 ];then

echo "input $Test1 ---->> $Cut invalid"

exit 2

fi

else

if [ $Cut -gt 254 ];then

echo "input $Test1 ---->> $Cut invalid"

exit 2

fi

fi

done

declare -i Num

declare -i Fail

Num=0

Fail=0

for i in `seq 1 10`

do

if ping -c 1 -W 1 ${Test1}$i &> /dev/null ;then

echo "Have ${Test1}$i"

Num=$((Num+1))

else

Fail=$((Fail+1))

echo "No ${Test1}$i"

fi

done

echo "Host online have $Num ."

echo "Host no online have $Fail ."

最后一个for循环,我嫌多,只写了10个值,有兴趣的哥们,自己改 seq 1 10改成1 254即可...还有关于a类b类c类网,由于本人网络方面知识的欠缺,所以判断的值,估计挺不正确的,列位就谅解一下吧....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息