WindowsPowershellSwitch语句
下⾯的例⼦将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
shell代码
# 使⽤ 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"
switch($domain)
{
"Www.jB51" {"Ok 1"}
"www.JB51" {"Ok 2" }
"WWW.jb51.NET" {"Ok 3"}
}
Ok 1
Ok 2
Ok 3
⼤⼩写敏感
怎样在⽐较字符串时能够恢复为⼤⼩写敏感模式,Switch有⼀个-case 选项,⼀旦指定了这个选项,⽐较运算符就会从-eq 切换到 -ceq,即⼤⼩写敏感⽐较字符串:
复制代码代码如下:
$domain="www.jb51"
#⼤⼩写敏感
switch -case ($domain)
{
"Www.jB51" {"Ok 1"}
"www.JB51" {"Ok 2" }
"www.jb51" {"Ok 3"}
}
#Ok 3
使⽤通配符
字符串⾮常特殊,可是使⽤通配符,幸运的是Powershell也⽀持,果然Power啊。但是在Switch语句后要指定 -wildcard 选项
复制代码代码如下:
$domain="www.jb51"
#使⽤通配符
switch -wildcard($domain)
{
"*"    {"匹配'*'"}
"*" {"匹配*" }
"*.*.*" {"匹配*.*.*"}
}
匹配'*'
匹配*
匹配*.*.*
在字符串匹配中,⽐通配符功能更强⼤是正则表达式,Powershell的Switch语句也⽀持,真是太棒了。当然需要给Switch关键字指定选项-regex
复制代码代码如下:
$mail="www@jb51"
#使⽤通配符
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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。