Windows Powershell Switch 语句
下面的例子将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.gimoo.net" switch($domain) { "Www.gimoo.net" {"Ok 1"} "www.gimoo.net" {"Ok 2" } "WWW.gimoo.net" {"Ok 3"} } Ok 1 Ok 2 Ok 3
大小写敏感
怎样在比较字符串时能够恢复为大小写敏感模式,Switch有一个-case 选项,一旦指定了这个选项,比较运算符就会从-eq 切换到 -ceq,即大小写敏感比较字符串:
$domain="www.gimoo.net" #大小写敏感 switch -case ($domain) { "Www.gimoo.net" {"Ok 1"} "www.gimoo.net" {"Ok 2" } "www.gimoo.net" {"Ok 3"} } #Ok 3
使用通配符
字符串非常特殊,可是使用通配符,幸运的是Powershell也支持,果然Power啊。但是在Switch语句后要指定 -wildcard 选项
$domain="www.gimoo.net" #使用通配符 switch -wildcard($domain) { "*" {"匹配'*'"} "*.net" {"匹配*.net" } "*.*.*" {"匹配*.*.*"} } 匹配'*' 匹配*.net 匹配*.*.*
在字符串匹配中,比通配符功能更强大是正则表达式,Powershell的Switch语句也支持,真是太棒了。当然需要给Switch关键字指定选项-regex
$mail="www@gimoo.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 ForEach-Object 循环
对管道对象逐个处理如果使用Get-WmiObject获取系统中的服务,为了排版可能会也会使用Format-Table对结果进行表格排版。PSC:PowershellGet-WmiObjectWin32_Service|Forma
Windows Powershell Foreach 循环
下面举两个例子:$array=7..10foreach($nin$array){$n*$n}#49#64#81#100foreach($fileindirc:windows){if($file.Length-gt1mb){$File.Name}}#explorer.exe#WindowsUpdate.log这里只为了演示foreach
Windows Powershell Do While 循环
继续与终止循环的条件do-while()会先执行再去判断,能保证循环至少执行一次。PSC:Powershelldo{$n=Read-Host}while($n-ne0)10100992012世界末日为什么不退出因为条件
标签:条件,字符串,通配符,语句,多个