已经介绍过,相关正则表达式的概念,下面记录一些鄙人在工作中遇到的问题和经验:
1.使用正则表达式判断交互输入;
问题:
在输入的值里,可以简单的判断其范围,但有些时候还需要判断类型,避免因为输入错误造成脚本不能
执行,或错误执行等问题;
示例:
判断一个以>0数字开头的数字组合:
if [[ $1 =~ '^([1-9][0-9])*$' ]] && [ $1 -le $max ]
then
.........
else
.........
fi
看上去这个判断没有什么问题(事实上它的确可以实现),但在应用的时候发现"在正常判断数字的时候没有问题,但在判断特殊字符的时候却出现问题".
这会带来一个比较严重的安全问题,如果我将这个代码写的很冗长,很难避免里面那个调用不会被利用.
问题就处在"^([1-9][0-9])*$"上,在正则表达式里"*"代表的是"匹配0次或多次".说明即使不输入数字,只要不是字母,其它的输入也可能被调用.
如果简单的将"*"改为"+"则会造成不能输入个位数字的请款.
解决:
解决的办法也很简单,将"^([1-9][0-9])*$"改为"^([1-9]){1}([0-9])*$"即可.这样就完全匹配了输入的类型.
注:
zmt1982 兄说的对,其实只需要"^[1-9][0-9]*$"(以1-9数字开头,0-9数字出现0次或多次为结尾)就可以了 ^^ 俺是想的太多了.....欢迎大家指正
经验:
别拿shell不当干粮.
阅读(3056) | 评论(1) | 转发(0) |