加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell 函数实现检测字符串是否为合法的 IPv4 地址

发布时间:2020-12-15 16:15:37 所属栏目:安全 来源:网络整理
导读:导语: 此 shell 函数仅以记录之前的劳动果实,并分享给他人,个人原创,欢迎使用并给予 bug 的反馈. #!/bin/bash isLegalIPv4 () { local myLocation= ${FUNCNAME} local isStrict= 0 local s= function usage () { echo -e "nUsage:n ${myLocation} [-h]|[-s

导语: 此 shell 函数仅以记录之前的劳动果实,并分享给他人,个人原创,欢迎使用并给予 bug 的反馈.

#!/bin/bash
 isLegalIPv4 ()
 {
   local myLocation=${FUNCNAME}
   local isStrict=0
   local s=
   function usage ()
   {
     echo -e "nUsage:n ${myLocation} [-h]|[-s] IP1[,IP2,...]n"
     echo -e " -s,开启严格模式,此时若某个非零数字前面有前缀0时该IP无效"
     echo -e " -h,输出此说明方式n"
   }
   function hasNotPrefixZero ()
   {
     local x=
     for x in $(echo $@ | sed 's/./ /g')
     do
       [ "${x:0:1}" == "0" ] && [ $x -ne 0 ] && return 1
     done
     return 0
   }
   function isDigitCharAll ()
   {
     echo $1 | sed 's/.//g' | grep -E "^[0-9]+$" >&/dev/null
     return $?
   }
   function checkNumberRange ()
   {
     local arr=($(echo $1 | sed 's/./ /g'))
     if [ ${#arr[@]} -ne 4 ]; then
       echo "$1 不是合法的 IPv4 地址.合法的 IPv4 地址只能 有3个分割符'.'"
       return 1
     fi
     if [ ${arr[0]} -eq 0 ]; then
       echo "$1 不是合法IPv4地址. 因为它包含超出范围的数字段(第1段的范围是: 1~255; 第2/3/4段的范围: 0~255)."
       return 1
     fi
     for x in ${arr[@]}
     do
       if [ $x -gt 255 ]; then
         echo "$1 不是合法IPv4地址. 因为它包含超出范围的数字段(第1段的范围是: 1~255; 第2/3/4段的范围: 0~255)."
         return 1
       fi
     done
     return 0
   }
   [ $# -eq 0 ] && usage && return
   [ $# -ge 1 ] && [ "x$1" == "x-h" -o "x$1" == "x-H" ] && usage && return
   [ $# -ge 1 ] && [ "x$1" == "x-s" -o "x$1" == "x-S" ] && isStrict=1 && shift
   for s in $(echo $@ | sed 's/,/ /g')
   do
     isDigitCharAll $s
     [ $? -ne 0 ] && echo "$s 不是合法 IPv4 地址. 因为它包含非数字字符(分隔符'.'除外)" && continue
     checkNumberRange $s
     [ $? -ne 0 ] && continue
     if [ $isStrict -eq 1 ]; then
       hasNotPrefixZero $s
       [ $? -ne 0 ] && echo "$s 不是合法 IPv4 地址. 当前为严格模式,同时它含有前缀0的数字段." && continue
     fi
     echo "$s 是合法 IPv4 地址."
   done
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读