《Puppet实战手册》——2.9 在if语句中使用正则表达式

本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.9节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.9 在if语句中使用正则表达式

正则表达式是可以在if语句和其他条件语句中进行测试的另一种表达式。正则表达式是使用模式匹配来比较字符串的一种强大的方式。

操作步骤
下面是在条件语句中使用正则表达式的一个例子。

将下面的代码添加到清单文件中:

if $::lsbdistdescription =~ /LTS/ {
 notify { 'Looks like you are using a Long Term Support
  version of Ubuntu.': }
} else {
 notify {'You might want to upgrade to a Long Term Support
  version of Ubuntu...': }
}

工作原理
Puppet将两个/(正斜线)之间的字符串视为正则表达式,用于描述需要匹配的文本。如果匹配成功,则if表达式的值为真(true),就会执行第一组花括号之间的代码。

如果希望在文本不匹配的条件下执行某些代码,使用!~代替=~。

if $::lsbdistdescription !~ /LTS/ {
更多参考
正则表达式非常强大,但是很难理解和调试。如果感觉正在用的正则表达式太复杂,不能一眼看明白它在做什么,最好简化设计,使其更加简单化。但是,正则表达式捕获模式是个非常有用的功能。

捕获模式
正则表达式不仅可以匹配文本,还可以捕获到匹配的文本,并将其保存在一个变量中。

$input = 'Puppet is better than manual configuration'
if $input =~ /(.*) is better than (.*)/ {
 notify { "You said '${0}'. Looks like you're comparing ${1}
  to ${2}!": }
}

前面的代码会生成以下输出:

You said 'Puppet is better than manual configuration'. Looks 
like you're comparing Puppet to manual configuration!

变量$0存储整个匹配的文本(假设全部匹配成功)。如果使用括号括起了正则表达式中的任何部分,每一个匹配到的结果都将被存储在变量中。第一个匹配到的为$1,第二个$2,依此类推,如前面的例子中所示。

上一篇:TX Text Control文字处理教程(8)使用超链接


下一篇:XenServer 6.5实战系列:License Management