BASH脚本中使用正则表达式检查IP地址和端口号

新版本bash(可能从3.0以后)内置了运算符 =~ 来支持正则表达式匹配。请注意此运算符只能用在[[…]]表达式中,而不能用在[…] 中。bash内置支持的好处在于使用方便和效率提升,不需要fork一个process即可以进行正则表达式匹配。但是似乎bash对正则表达式的支持不很完善,比如用 转义符\d无法匹配单个数字,必须用 [0-9]来匹配才行,比较罗嗦。

下面是在bash脚本中用正则表达式对IP地址和端口号进行检查的代码:
33 #check arguments
34
35 #check ip
36 pattern_ip=“**^(([0-9][1-9][0-9]1[0-9]{2}2([0-4][0-9]5[0-5]))\.){3}([0-9][1-9][0-9]1[0-9]{2}2([0-4][0-9]5[0-5]))$“**
37 #pattern_ip=”^((1?[0-9]?[0-9]2([0-4][0-9]5[0-5]))\.){3}(1?[0-9]?[0-9]2([0-4][0-9]5[0-5]))$”
38
39 if [[ !(($1 =~ $pattern_ip) && ($3 =~ $pattern_ip)) ]] ; then
40     echo “**from_ip or to_ip has errors!“**
41     exit 0
42 fi
43
44 #check port
45 pattern_port=“**^([0-9]{1,4}[1-5][0-9]{4}6[0-5]{2}[0-3][0-5])$“**
46 if [[ !($2 =~ $pattern_port) ]]; then
47     echo “**port has erros!“**
48     exit 0**;**
49 fi

===
[erq]