puppet自动化运维之运算符及正则表达式
2014-05-19 00:00
507 查看
摘要: 个人近期将发布puppet自动化运维的亲身实战,有很多来之网上的文档,特别是http://kisspuppet.com和《Puppet实战》的。此次推出puppet的运算符及正则表达式,欢迎网友指正。
有复杂的表达式的时候要注意使用括号()。
注:
(1)乘幂的基数不能为负,如 (-5) ** 2.5 # error;
(2)乘幂结果不能超出计算机表示的限制,如10 ** 999999 # error
(3)取余的操作数如不是整数,四舍五入成整数后运算;运算符右侧不能为零
(4)单目负可用于变量: - $y ; # 等效于 $y * -1
(5)对应有 +=、-=、*=、/=、**=、%=
$str1=”a”,$str2=”a“,则print ($str1 cmp $str2) ==> 0
$str1=”a”,$str2=”b”,则print($str1 cmp $str2)===> -1
$str1=”b”,$str2=”a”,则print($str1 cmp $str2)===> 1
注:文件运算符有问题,无论是否存在,都返回,存在,想要能使用,需要和逻辑非(!),连用。
puppet中,正则表达式主要用来做匹配。
puppet把斜线之间的文本当作正则表达式。
如何使用正则表达式来匹配:
格式:
注:perl的正则表达式以斜杠【/】包含。
特殊字符,同shell。
至此,puppet的运算符及正则表达式就结束了,接下来的是条件语句的学习,请听下回分解!!!
有复杂的表达式的时候要注意使用括号()。
1.算数运算符:
操作符 | 描述 | 实例 |
+ | 加法 | $a=5 + 3 file {"/tmp/temp6.txt": content => "$a", } 8 |
- | 减法 | $a=5 - 3 file {"/tmp/temp6.txt": content => "$a", } 2 |
* | 乘法 | $a=5 * 3 file {"/tmp/temp6.txt": content => "$a", } 15 |
/ | 除法 | $a=5 / 3 file {"/tmp/temp6.txt": content => "$a", } 1 |
** | 幂 | 报错(*) |
% | 取余 | 报错(%) |
(1)乘幂的基数不能为负,如 (-5) ** 2.5 # error;
(2)乘幂结果不能超出计算机表示的限制,如10 ** 999999 # error
(3)取余的操作数如不是整数,四舍五入成整数后运算;运算符右侧不能为零
(4)单目负可用于变量: - $y ; # 等效于 $y * -1
(5)对应有 +=、-=、*=、/=、**=、%=
2.整数比较运算符:
一般用于if语句,同shell。操作符 | 描述 | 实例 |
< | 小于 | if 6 < 7 { $a=" 6 < 7 is true"} else { $a="6 < 7 is false"}file {"/tmp/temp6.txt": content => "$a",} 6 < 7 is true |
> | 大于 | if 6 > 7 { $a=" 6 > 7 is true"} else { $a="6 > 7 is false"}file {"/tmp/temp6.txt": content => "$a",} 6 > 7 is false |
== | 等于 | if 6 == 7 { $a="6 == 7 is true"} else { $a="6 == 7 is false"}file {"/tmp/temp6.txt": content => "$a",} 6 == 7 is false |
<= | 小于等于 | if 6 <= 7 { $a="6 <= 7 is true"} else { $a="6 <= 7 is false"}file {"/tmp/temp6.txt": content => "$a",} 6 <= 7 is true |
>= | 大于等于 | if 6 >= 7 { $a="6 >= 7 is true"} else { $a="6 >= 7 is false"}file {"/tmp/temp6.txt": content => "$a",} 6 >= 7 is false |
!= | 不等于 | if 6 != 7 { $a="6 != 7 is true"} else { $a="6 != 7 is false"}file {"/tmp/temp6.txt": content => "$a",} 6 != 7 is true |
<=> | 比较,返回1,0,-1 | 0 : 两个值相等 1 :第一个值大 -1 : 第二个值大 |
3.字符串比较运算符:
字符串比较函数 eq、ne、cmp、lt、gt、le、ge,使用cmp就好。绝不能用'==',要用eq,正确的做法是:不论整形Perl字符串,都用eq或ne。符号 | 范例 | 说明 |
gt | $str1 gt $str2 | 如果$str1大于$str2返回1否则返回0 |
ge | $str1 ge $str2 | 如果$str1大于等于$str2返回1否则返回0 |
lt | $str1 lt $str2 | 如果$str1小于$str2返回1否则返回0 |
le | $str1 le $str2 | 如果$str1小于等于$str2返回1否则返回0 |
eq | $str1 eq $str2 | 如果$str1等于$str2返回1否则返回0 |
ne | $str1 ne $str2 | 如果$str1不等于$str2返回1否则返回0 |
cmp | $str1 cmp $str2 | 如果$str1大于$str2返回1;如果$str1=$str2返回0;如果$str1小于$str2则返回-1 |
$str1=”a”,$str2=”b”,则print($str1 cmp $str2)===> -1
$str1=”b”,$str2=”a”,则print($str1 cmp $str2)===> 1
4.逻辑运算符:
操作符 | 描述 | 实例 |
||、or | 与(||报错) | if (7 == 9) or (8 == 8) { $a="It is true" } else { $a="It is false" } file {"/tmp/temp6.txt": content => "$a", } It is true |
&&、and | 或(&&报错) | if (7 == 7) and (8 == 8) { $a="It is true" } else { $a="It is false" } file {"/tmp/temp6.txt": content => "$a", } It is true |
!、not | 非(not报错) | if !(7 == 9) { $a="It is true" } else { $a="It is false" } file {"/tmp/temp6.txt": content => "$a", } It is true |
5.文件运算符:
和逻辑运算符连用。注:文件运算符有问题,无论是否存在,都返回,存在,想要能使用,需要和逻辑非(!),连用。
参数 | 描述 | 实例 |
-d $path | 如果$path是一个目录,返回1 | if ! "-d /roots" { $a="is a file !!!"} else { $a="is not a file !!!"}file {"/tmp/temp6.txt": content => "$a",} |
-f $file | 如果$file是一个文件,返回1 | |
-e $file | 如果$file是存在,返回1 | |
-r $file | 如果$file是可读取,返回1 | |
-w $file | 如果$file是可写入,返回1 | |
-x $file | 如果$file是可执行,返回1 | |
-b $file | 如果$file是binary文件,返回1 |
6.正则表达式:
正则表达式有两种存在形式:匹配和替换puppet中,正则表达式主要用来做匹配。
puppet把斜线之间的文本当作正则表达式。
如何使用正则表达式来匹配:
格式:
字符串 =~ /正则表达式/ #匹配 字符串 !~ /正则表达式/ #不匹配 |
特殊字符,同shell。
元字符 | 功能 | 示例 | 示例的匹配对象 |
^ | 行首定位符 | /^love/ | 匹配所有以love开头的行 |
$ | 行尾定位符 | /love$/ | 匹配所有以love结尾的行 |
. | 匹配除换行符外的单个字符 | /l..e/ | 匹配包含字母l、后跟两个任意字符、再跟字母e的行 |
* | 匹配零个或多个前导字符 | / *love/ | 匹配在零个或多个空格紧跟着模式love的行 |
[] | 匹配指定字符组内的任一字符 | [xyz] | 将会匹配字符x, y, 或z. |
[c-n] | 匹配字符c到字符n之间的任意一个字符. | ||
[B-Pk-y] | 匹配从B到P, 或者从k到y之间的任意一个字符. | ||
[a-z0-9] | 匹配任意小写字母或数字. | ||
[^b-d] | 将会匹配范围在b到d之外的任意一个字符. 这就是使用^对字符集取反的一个实例. | ||
[Yy][Ee][Ss] | 能够匹配yes, Yes, YES, yEs | ||
/[Ll]ove/ | 匹配包含love和Love的行 |
+ | 匹配一个或多个前导符 | [a–z]+ove | 匹配一个或多个小写字母,后面跟着ove,如approve, love, behoove |
? | 匹配零个或一个前导符 | lo?ve | 匹配lve或这love |
a|b | 匹配a或b | love|hate | 匹配love或者hate |
(…) | 匹配一组字符 | love(able|ly) (ov)+ | 匹配loveable或者lovely. 匹配一个或多个ov |
\(…\) | 保存已匹配的字符 | s/\(love\)able/\1er/ | 标记元字符之间的模式,并将其保存为标签1,之后可以用\1来引用它。最多可定义9个标签,从左边开始编号,最左边的是第一个。在这个示例中,love被保存在寄存器1里,之后被替换串引用,结果loveable被替换为lover |
x\{m\} | 连续m个x | /o\{5\}/ | 分别匹配出现连续5个字母o、至少5个连续的o、或5—10个连续的o的行 |
x\{m,\} | 至少m个x | /o\{5,\}/ | |
x\{m,n\} | 至少m个、但不超过n个x | /o\{5,10\}/ |
①.实例:
vi file.pp $string="Hello fufangchun ,my english name is perofu!!!" if $string =~ /[hH]ello/ { $a="I get it!!!" } else { $a="I did not get it!!! " } file {"/tmp/temp6.txt": content => "$a", } # [root@client ~]# cat /tmp/temp6.txt cat: /tmp/temp6.txt: No such file or directory [root@client ~]# puppet agent -vv --test --server master.perofu.com info: Caching catalog for client.perofu.com info: Applying configuration version '1395163673' notice: /Stage[main]//File[/tmp/temp6.txt]/ensure: defined content as '{md5}eed05ef64624b7d7ea7595e1e5d079d1' notice: Finished catalog run in 0.02 seconds [root@client ~]# cat /tmp/temp6.txt I get it!!! |
相关文章推荐
- CrazyWing:Python自动化运维开发实战 五、Python运算符与表达式
- 自动化运维puppet整理
- 自动化运维之 Puppet 实战(一)
- 自动化运维工具Puppet在实际工作中的注意事项 推荐
- 运维自动化之puppet条件判断(3)
- puppet运维自动化之sshkey管理
- puppet、Ansible、SaltStack 自动化运维工具简单对比
- puppet自动化运维之user资源
- puppet自动化运维之host资源
- puppet运维自动化之Exec资源管理
- 自动化运维工具puppet的基础使用
- 运维自动化之puppet
- 【第二篇日记】C# 的转义字符,结构定义、字符转换、类型检查、运算符以及正则表达式
- 运维自动化之puppet类(4)
- puppet自动化运维之tag标签puppet自动化运维之tag标签
- puppet自动化运维之group资源
- awk 正则表达式、正则运算符详细介绍
- puppet自动化运维之yumrepo资源
- 运维自动化之puppet
- puppet自动化运维之条件语句