手机
当前位置:查字典教程网 >脚本专栏 >PowerShell >Windows Powershell Switch 语句
Windows Powershell Switch 语句
摘要:下面的例子将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

【Windows Powershell Switch 语句】相关文章:

Windows Powershell 复制数组

Windows Powershell 环境变量

Windows Powershell 创建数组

Windows Powershell方法(对象能做什么)

Windows Powershell Switch 循环

Windows Powershell 进行数学运算

Windows Powershell 变量的幕后管理

Windows Powershell使用管道

Windows Powershell 介绍和安装

Windows Powershell 执行外部命令

精品推荐
分类导航