用shell判断IP地址是否合法,主要知识点是IFS(Internal Field Seprator),即内部域分隔符,详细解释如下:

Shell 的环境变量分为 set, env 两种,其中 set 变量可以通过 export 工具导入到 env 变量中。其中,set 是显示设置shell变量,仅在本 shell 中有效;env 是显示设置用户环境变量 ,仅在当前会话中有效。换句话说,set 变量里包含了 env 变量,但 set 变量不一定都是 env 变量。这两种变量不同之处在于变量的作用域不同。显然,env 变量的作用域要大些,它可以在 subshell 中使用。

而 IFS 是一种 set 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量。

总结:IFS是shell的特殊环境变量。shell根据IFS存储的值,可以是空格、tab、换行符或者其他自定义符号,来解析输入和输出的变量值。

#!/bin/bash
#判断IP地址合法性
if [[ ! -n "$1" ]]; then
    echo "必须输入合法的IP地址"
    exit 1
    elif [[ $1 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        ip=$1
        OIFS=$IFS
        IFS='.'
        ip=($ip)
        IFS=$OIFS
        if [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]; then
            echo "IP地址输入正确"
        else
            echo "IP地址输入不合法"
        fi
    else
    echo "IP格式错误"
fi

#ip地址补位填充,用于生成主机名等用途

#ifconfig eth0|grep 'inet addr'|awk -F '[ :]' '{print $13}'|awk -F . '{for(i=1;i<=NF;i++)printf("%03d",$i)}'
最后修改:2018 年 11 月 02 日
如果觉得我的文章对你有用,请随意赞赏