Powershell Switch 条件

Powershell Switch 条件 6


如果语句中有多路分支,使用IF-ELSEIF-ELSE不友好,可以使用Switch,看起来比较清爽一点。
下面的例子将If-ElseIF-Else转换成Switch语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 使用 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”

1
2
3
4
5
6
7
8
9
10
$value =18
# 使用 Switch 测试取值范围
switch ( $value )
{
     { $_ -lt 10} { "小于10" }
     10  { "等于10" }
     { $_  -gt 10} { "大于10" }
}
#输出
#大于10
没有匹配条件

在IF-Else语句中如果没有合适的条件匹配,可以在Else中进行处理,同样在Switch语句中如果case中没有条件匹配,可以使用关键字Default进行处理。
同样是上面的例子,稍加修改:

1
2
3
4
5
6
7
8
9
10
11
$value =-7
# 使用 Switch 测试取值范围
switch ( $value )
{
     {( $_ -lt 10)  -and $_ -gt 0) }  { "小于10" }
     10  { "等于10" }
     { $_  -gt 10} { "大于10" }
     Default { "没有匹配条件" }
}
#Output:
#没有匹配条件
多个条件匹配

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

1
2
3
4
5
6
7
8
9
10
11
12
13
$value =2
# 使用 Switch 测试取值范围
switch ( $value )
{
     { $_ -lt 5 }  {  "小于5" }
     { $_ -gt 0 }   {  "大于0" }
     { $_ -lt 100}{  "小于100" }
     Default { "没有匹配条件" }
}
 
#小于5
#大于0
#小于100

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

1
2
3
4
5
6
7
8
9
10
11
$value =99
# 使用 Switch 测试取值范围
switch ( $value )
{
     { $_ -lt 5 }   {  "小于5" break }
     { $_ -gt 0 }   {  "大于0" break }
     { $_ -lt 100}  {  "小于100" break }
     Default { "没有匹配条件" }
}
 
#大于0
比较字符串

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

1
2
3
4
5
6
7
8
9
10
$domain = "www.mossfly.com"
switch ( $domain )
{
     "Www.moSSfly.com" { "Ok 1" }
     "www.MOSSFLY.com" { "Ok 2" }
     "WWW.mossfly.COM" { "Ok 3" }
}
Ok 1
Ok 2
Ok 3
大小写敏感

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

1
2
3
4
5
6
7
8
9
$domain = "www.mossfly.com"
#大小写敏感
switch -case ( $domain )
{
     "Www.moSSfly.com" { "Ok 1" }
     "www.MOSSFLY.com" { "Ok 2" }
     "www.mossfly.com" { "Ok 3" }
}
#Ok 3
使用通配符

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

1
2
3
4
5
6
7
8
9
10
11
$domain = "www.mossfly.com"
#使用通配符
switch -wildcard ( $domain )
{
     "*"     { "匹配'*'" }
     "*.com" { "匹配*.com" }
     "*.*.*" { "匹配*.*.*" }
}
匹配 '*'
匹配*.com
匹配*.*.*

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

1
2
3
4
5
6
7
8
9
10
11
$mail = "www@mossfly.com"
#使用通配符
switch -regex ( $mail )
{
     "^www"     { "www打头" }
     "com$"     { "com结尾" }
     "d{1,3}.d{1,3}.d{1,3}.d{1,3}" { "IP地址" }
}
 
#www打头
#com结尾
同时处理多个值

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

1
2
3
4
5
6
7
8
9
10
$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
本文链接:  http:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值