安安 - ifs
type: channel
link: https://blog.90.vc/tag/ifs/
items: shell判断IP地址是否合法

shell判断IP地址是否合法
type: item
date: 2018-11-02T04:45:00+00:00
description: 用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)}'