简介

写脚本的时候,需要判断IP是否是合法IP,再进行设置。

什么样子的字符串是合法 IP

IPv4 使用 32 位(4 字节)地址,即

8 bit/byte *4 byte = 32 bit

二进制范围:

00000000.00000000.00000000.00000000 - 11111111.11111111.11111111.11111111

因此,只要判断是在这个范围就可以,判断是否是合法 IP?

脚本

分解判断:

  • 判断是否是ipv4格式

  • 判断值是否合法

#!/bin/bash

ip=$1
if [ "$ip" == "" ]; then
    echo "usage : $0 ip"
    exit 1
fi
err_mssage="$ip is invalid ipv4"
if !( echo $ip | grep -E '^[[:digit:]].[[:digit:]].[[:digit:]].[[:digit:]]$' >>/dev/null); then
    echo $err_mssage
    exit 1
fi

place1=$(echo $ip | awk -F "." '{print $1}')
place2=$(echo $ip | awk -F "." '{print $2}')
place3=$(echo $ip | awk -F "." '{print $3}')
place4=$(echo $ip | awk -F "." '{print $4}')

function check_number() {
    number=$1
    if [[ $number -ge 0 && $number -le 255 ]]; then
        return 0
    fi
    echo $err_mssage
    return 1
}
check_number $place1 || exit 1
check_number $place2 || exit 1
check_number $place3 || exit 1
check_number $place4 || exit 1

echo $ip is ipv4