Loading... 用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 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏