Windows Powershell Switch 语句
Windows Powershell Switch 语句
发布时间:2016-12-28 来源:查字典编辑
摘要:下面的例子将If-ElseIF-Else转换成Switch语句复制代码代码如下:#使用IF-ElseIF-ElseIf($value-eq1...

下面的例子将If-ElseIF-Else转换成Switch语句

复制代码 代码如下:

# 使用 IF-ElseIF-Else

If( $value -eq 1 )

{

"Beijing"

}

Elseif( $value -eq 2)

{

"Shanghai"

}

Elseif( $value -eq 3 )

{

"Tianjin"

}

Else

{

"Chongqing"

}

# 使用 Switch

switch($value)

{

1 {"Beijing"}

2 {"Shanghai"}

3 {"Tianjin"}

4 {"Chongqing"}

}

1

测试取值范围

使用 Switch 时缺省的比较运算符为 -eq 等于,你也可以自己定制比较条件,将条件放在花括号中,必须保证条件表达式的返回值为布尔类型”$True”或”$False”

复制代码 代码如下:

$value=18

# 使用 Switch 测试取值范围

switch($value)

{

{$_ -lt 10} {"小于10"}

10 {"等于10"}

{$_ -gt 10} {"大于10"}

}

#输出

#大于10

没有匹配条件

在IF-Else语句中如果没有合适的条件匹配,可以在Else中进行处理,同样在Switch语句中如果case中没有条件匹配,可以使用关键字Default进行处理。

同样是上面的例子,稍加修改:

复制代码 代码如下:

$value=-7

# 使用 Switch 测试取值范围

switch($value)

{

{($_ -lt 10) -and ( $_ -gt 0) } {"小于10"}

10 {"等于10"}

{$_ -gt 10} {"大于10"}

Default {"没有匹配条件"}

}

#Output:

#没有匹配条件

多个条件匹配

如果case中有多个条件匹配,那么每个匹配的条件都会进行处理,例如:

复制代码 代码如下:

$value=2

# 使用 Switch 测试取值范围

switch($value)

{

{$_ -lt 5 } { "小于5" }

{$_ -gt 0 } { "大于0" }

{$_ -lt 100}{ "小于100"}

Default {"没有匹配条件"}

}

#小于5

#大于0

#小于100

如果碰到匹配条件时只处理一次,可以使用Break关键字

复制代码 代码如下:

$value=99

# 使用 Switch 测试取值范围

switch($value)

{

{$_ -lt 5 } { "小于5"; break}

{$_ -gt 0 } { "大于0"; break}

{$_ -lt 100} { "小于100"; break}

Default {"没有匹配条件"}

}

#大于0

比较字符串

之前的条件比较的都是数字,接下来比较字符串,默认的条件判断为-eq ,我们知道在Powershell中字符串的使用-eq比较大小写不敏感,所以才有下面的例子:

复制代码 代码如下:

$domain="www.jb51.net"

switch($domain)

{

"Www.jB51.net" {"Ok 1"}

"www.JB51.net" {"Ok 2" }

"WWW.jb51.NET" {"Ok 3"}

}

Ok 1

Ok 2

Ok 3

大小写敏感

怎样在比较字符串时能够恢复为大小写敏感模式,Switch有一个-case 选项,一旦指定了这个选项,比较运算符就会从-eq 切换到 -ceq,即大小写敏感比较字符串:

复制代码 代码如下:

$domain="www.jb51.net"

#大小写敏感

switch -case ($domain)

{

"Www.jB51.net" {"Ok 1"}

"www.JB51.net" {"Ok 2" }

"www.jb51.net" {"Ok 3"}

}

#Ok 3

使用通配符

字符串非常特殊,可是使用通配符,幸运的是Powershell也支持,果然Power啊。但是在Switch语句后要指定 -wildcard 选项

复制代码 代码如下:

$domain="www.jb51.net"

#使用通配符

switch -wildcard($domain)

{

"*" {"匹配'*'"}

"*.net" {"匹配*.net" }

"*.*.*" {"匹配*.*.*"}

}

匹配'*'

匹配*.net

匹配*.*.*

在字符串匹配中,比通配符功能更强大是正则表达式,Powershell的Switch语句也支持,真是太棒了。当然需要给Switch关键字指定选项-regex

复制代码 代码如下:

$mail="www@jb51.net"

#使用通配符

switch -regex ($mail)

{

"^www" {"www打头"}

"net$" {"net结尾" }

"d{1,3}.d{1,3}.d{1,3}.d{1,3}" {"IP地址"}

}

#www打头

#net结尾

同时处理多个值

Switch支持对集合所有元素进行匹配,下面的例子使用Powershell Switch语句演示打印水仙花数:

复制代码 代码如下:

$value=100..999

switch($value)

{

{[Math]::Pow($_%10,3)+[Math]::Pow( [Math]::Truncate($_%100/10) ,3)+[Math]::Pow( [Math]::Truncate($_/100) , 3) -eq $_} {$_}

}

#153

#370

#371

#407

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新PowerShell学习
热门PowerShell学习
脚本专栏子分类