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
 }

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...