题解 | #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