[PowerShell入门]关系运算和逻辑运算

来源:互联网 发布:js object to list 编辑:程序博客网 时间:2024/05/20 04:51

PowerShell入门

本节讲一下PowerShell里面的关系运算和逻辑运算,这两个知识点是学习控制结构的前提条件。


关系运算

值大小比较

由于>号已经作为重定向运算符来使用了,PowerShell里面的关系表达式没有像普通的编程语言一样采用尖括号来代表大于和小于号,而是采用了-号加上指令的形式来表示关系运算符。为了保持一致,其他运算符也使用了这种形式。

比较值大小的关系运算符有以下几个:

  • -[i|c]eq 等于(equal to)
  • -[i|c]ne 不等于(not equal to)
  • -[i|c]gt 大于(greater than)
  • -[i|c]ge 大于等于(greater than or equal to)
  • -[i|c]lt 小于(less than)
  • -[i|c]le 小于等于(less than or equal to)

其中方括号中的前缀是可选的,i代表大小写不敏感,c代表大小写敏感。字符串会根据字母表顺序进行比较。

> "a" -eq "A"True> "a" -ceq "A"False

如果关系表达式的左边是数组类型,那么PowerShell会将左边数组中的元素逐个与右边元素进行比较。并返回符合条件的元素组成的数组。

> 1,2,3,4,5 -lt 312

以上写法与1,2,3,4,5 | Where-Object {$_ -lt 3}等价。

在关系表达式中,如果两边的类型不同,PowerShell会自动将右边的值转换为左边值的类型。这个特性在有些情况下确实提供了不小的灵活性,但是当拿字符串和数值进行比较的时候可能会出现一些问题。

> 2 -eq "02"True> "02" -eq 2False

上面这两个表达式中,第一个表达式将右边的字符串”02”转换为数字2,所以两者相等,返回True。但是第二个表达式将右边的数字2转换为字符串”2”,按照字符串的比较规则进行比较的话比”0”小,所以返回了False。

数组元素比较

-contains和-notcontains两个运算符用于判断数组中是否包含某个元素。

> 1,2,3,4,5 -contains 3True> 1,2,3,4,5 -notcontains 3False

字符串匹配比较

PowerShell中有两种方式用于匹配字符串。-like和-notlike跟SQL里面的LIKE差不多,使用通配符*用于匹配所有字符。-match和-notmatch则使用正则表达式进行字符串匹配。

> "Hello world!" -like "*llo*"True> "hh203" -match "^[a-z]{2}\d{2}$"False> "mk23" -match "^[a-z]{2}\d{2}$"True

类型比较

PowerShell提供了两个运算符用于检测对象的类型,分别是-is和-isnot。

> 1 -is [int]True> 1 -is "int"True> 1 -isnot [int]False

逻辑运算

与关系运算符一样,PowerShell中的逻辑运算符也采用-号加指令的形式来表示。PowerShell中有四种逻辑运算符,分别是-not(非,也可以用!代替)、-and(与)、-or(或)和-xor(异或,只在两者相异时返回True)。

如果想在PowerShell中直接使用布尔常量,可以使用PowerShell内置的两个常量$true和$false。

> $x = 3> ($x -lt 5) -and ($x -gt 1)True> $true -xor $falseTrue> !$trueFalse

总结

由于PowerShell不仅仅是一门语言,更是一个shell,所以在PowerShell中采用了跟其他语言不同的运算符表现形式。-号加指令的形式写起来有点麻烦,不直观,但所幸并不算难记,不适感会在使用熟练之后慢慢消失。

博主接下来的计划还是一边逐步完善技术栈,一边写一些学习笔记和心得。下一篇的话应该就是PowerShell中的控制结构了。另外最近也在慢慢补Python的标准库和源码…接下来文章的主题还是会集中在Python、PowerShell和Redis上面。


我的其他PowerShell入门相关文章:
[PowerShell入门]变量、赋值、算术运算、类型转换、数组、注释


参考资料:
Windows PowerShell 2.0之条件表达式的分析
PowerShell 学习(一):运算符
https://technet.microsoft.com/zh-cn/library/dd347588.aspx

感谢以上内容的提供者!

阅读全文
0 0
原创粉丝点击