微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

导语: 此 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
 }

原文地址:https://www.jb51.cc/bash/390412.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐