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


Warning: array_rand(): Array is empty in /srv/htdocs/wp-content/plugins/easy-random-quotes/kl-easyrandomquotes.php on line 268

新版本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

===

Leave a Reply

Your email address will not be published. Required fields are marked *