题解 | #shell判断输入的是否为IP地址#

判断输入的是否为IP地址

http://www.nowcoder.com/practice/ad7b6dbfab2a4267a9991110c57aa64f

#! /usr/bin/env bash

############################################
# desc:
# author:
############################################

# 全局变量
array=""

############################################
# 经典for 循环 遍历ip段
#
############################################
function solution_1() {
    local length=0
    length=${#array[@]}
    if [[ ${length} < 4 ]]; then
        echo "error"
        return 0
    fi
    for(( i=0; i<${length}; i++ )); do
        if [[ ${array[i]} > 255 || ${array[i]} < 0 ]]; then
            echo "no"
            return 0
        fi
    done
    echo "yes"
}

############################################
# for in 遍历ip段
#
############################################
function solution_2() {
    local length=0
    length=${#array[@]}
    if [[ ${length} < 4 ]]; then
        echo "error"
        return 0
    fi
    for ele in ${array[@]}; do
        if [[ ${ele} > 255 || ${ele} < 0 ]]; then
            echo "no"
            return 0
        fi
    done
    echo "yes"
}

readonly MAX_IP_INT=4294967295
readonly ARR_CONST=(16777216 65536 256 1) # (2^24 2^16 2^8 2^0)
############################################
# ipv4 转整型
# 需要用到 常量 MAX_IP_INT 和 ARR_CONST
############################################
function solution_3() {
    local length=0
    length=${#array[@]}
    local int_ip=0
    if [[ ${length} < 4 ]]; then
        echo "error"
        return 0
    fi
    for(( i=${length}-1; i>=0; i-- )); do
       #int_ip=$[${int_ip}+(${array[i]}*${ARR_CONST[i]})]
       int_ip=$(( ${int_ip} + ${array[i]} * ${ARR_CONST[i]} ))
    done
    
    if [[ ${int_ip} > ${MAX_IP_INT} ]]; then
        echo "no"
        return 0
    fi
    echo "yes"
}

############################################
# awk正则
#
############################################
function solution_4() {
    local length=0
    length=${#array[@]}
    local int_ip=0
    if [[ ${length} < 4 ]]; then
        echo "error"
        return 0
    fi
}

############################################
#
#
############################################
function readFile() {
    while read line; do
        array=(${line})
        solution_1
    done < nowcoder.txt
}

readonly old_IFS=${IFS}
IFS="."
readFile
全部评论

相关推荐

02-08 15:53
门头沟学院 Java
CoderEcho:让公司知道便宜没好货
点赞 评论 收藏
分享
2024-12-23 06:50
门头沟学院 Java
给点吧求求了:3点发的帖子,害怕😰
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务