前置知识是Linux的基本正则表达式,和扩展正则表达式,即:
POSIX基础正则表达式(basic regular expression,BRE)
POSIX扩展正则表达式(extended regular expression,ERE)
1. 分析问题
这个问题最重要的就是对问题的分析。
合法的十进制IP地址的范围是[0.0.0.0 -255.255.255.255]
IP地址应当是全数字的,以三个“.”划分为4个字段,每个字段是0-255的数字。
对于0到255区间内的数字可以分为5类:
分类 | 数字区间 | 匹配模式 |
1位数 | 0-9 | [0-9] |
2位数 | 10-99 | [1-9][0-9] |
1开头的三位数 | 100-199 | 1[0-9]{2} |
2开头十位是0到4的三位数 | 200-249 | 2[0-4][0-9] |
2开头十位是5的三位数 | 250-255 | 25[0-5] |
2. Linux下匹配模式实现
把IP地址分为四个部分:
分类 | 解释 |
1 | 第一个部分以数字开头,以“.”结尾 |
2 | 第二个部分数字加“.” |
3 | 第三个部分数字加“.” |
4 | 第四个部分数字结尾 |
判断输出IP地址是否合法的脚本如下:
#!/bash
echo "Please input IP address:"
read tmp
pattern="([0-9]|[1-9][0-9]|[1][0-9]{2}|[2][0-4][0-9]|[2][5][0-5])"
regstr="^$pattern\.$pattern\.$pattern\.$pattern$"
if [[ $tmp =~ $regstr ]]
then
echo "Right IP!"
else
echo "Bad IP!"
fi
其中,
pattern变量储存数字0到255的匹配模式,双引号不能省略。
regstr变量是整个IP的地址的匹配模式。
if语句中的判断,运算符"=~"左侧写字符串,右侧写匹配模式。注意双中括号“[[]]”里两端各有空格。
演示:
如有错误,谢谢指出!