最近在做一些服务器安全方面的shell,有用到判断输入是否合法ip地址。在网上搜了一圈,有很多做法,最简单的就是直接判断输入内容是否全部为数字和“.”符号,这样的判断太范了,无法做到准确。更准确一些的就包含了字符个数等。后来找到了一个比较严谨的做法,经验证的确可用,代码如下:

#!/bin/bash
# By Chen.Zhidong
# http://sillydong.com
# Email:njutczd+gmail.com

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH

#Begin
usage(){
    echo -e "valid ipaddress\nUsage: $0 ipaddress"
    exit 0
}

valid_ip(){
    local  ip=$1
    local  stat=1
    if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        OIFS=$IFS
        IFS='.'
        ip=($ip)
        IFS=$OIFS
        [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
        stat=$?
    fi
    return $stat
}

if [ $# -lt 1 ];then
    usage
else
    if valid_ip "$1";then
        echo "$1 is valid ip address"
    else
        echo "$1 is INVALID ip address"
    fi
fi
exit 0
#End

出处:http://www.linuxjournal.com/content/validating-ip-address-bash-script

看官有需求的可以参考一下。