Windows Powershell Switch 語句_PowerShell

來源:互聯網
上載者:User

下面的例子將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
匹配*.*.*

在字串匹配中,比萬用字元功能更強大是Regex,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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.