zoukankan      html  css  js  c++  java
  • 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:
  • 相关阅读:
    DevComponents DotNetBar 中Ribbon汉化
    类型Universe无法解析程序 集:System.Design,Version=2.0.0.0
    MapXtreme使用编辑工具
    html中汉字乱码
    c#皮肤使用
    c# 中的internal使用
    DonNetBar汉化
    外汇期货学习专帖(转)
    苦难属于悲情的人
    IT规划宜分步走 忌盲目好大喜功(载)
  • 原文地址:https://www.cnblogs.com/micro-chen/p/5798125.html
Copyright © 2011-2022 走看看