bash脚本练习1

#!/usr/bin/bash
# 用函数实现ping指定网络内的所有主机,并显示其状态
# Usage:ping_range ip_address/netmask_prefix

# 测试单个IP地址是否在线的函数
myping(){
        IPADDR=$1
        if [[ !  "${IPADDR}" =~  ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] ;then
                echo "The input ${IPADDRESS} is illegal"
                exit
        fi


        ping -c1 -W1 ${IPADDR} &>/dev/null

        if [ $? -eq 0 ];then
                echo "${IPADDR} is online!"
        else
                echo "${IPADDR} if offline!"
        fi
}


if [ $# -ne 1 ];then
        echo "Usage: myping ipaddress/netmask_prefix"
        exit
fi

if [[  ! "$1" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}$ ]];then
        echo "$1 is illegal, Usage: ping_range ipaddress/netmask_prefix, for insance:ping_range 192.168.2.1/24"
        exit 1
fi

IPADDR=$(echo $1 | cut -d"/" -f1)
PREFIX=$(echo $1 | cut -d"/" -f2)

if [[ ! "$PREFIX" =~ ^(8|16|24)$ ]];then
        echo "netmask_prefix must be any number of 8 or 16 or 24"
        exit
fi
echo -e "IPADDR:${IPADDR}\tPREFIX:${PREFIX}"


case ${PREFIX} in
"8")
        NETWORK=${IPADDR%%.*}.0.0.0
        echo "Subnet: ${NETWORK}"
        # 写三层循环的myping
        ;;
"16")
        NETWORK=${IPADDR%.*}
        NETWORK=${NETWORK%.*}.0.0
        echo "Subent: ${NETWORK}"
        # 写两层循环的myping
        ;;
"24")
        NETWORK=${IPADDR%.*}.0
        echo "Subnet: ${NETWORK}"
        NETWORKPREFIX=${IPADDR%.*}
        for i in {1..254}
        do
                myping ${NETWORKPREFIX}.$i
        done

        ;;
*)
        echo "netmask_prefix errror: ${PREFIX}"
        exit
        ;;
esac
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值