PowerShell: switch文の書き方
PowerShellでは条件分岐の方法として、 if文以外にもswich文があります。 分岐する条件が多数ある場合はswitch文を 使った方がわかりやすいケースがあります。 switch文の書式は次の通りです。
switch (評価式) { 値1 { 処理1; break } 値2 { 処理2; break } 値3 { 処理3; break } ... Default {処理} }
評価式には変数やプロパティなど、
評価できる式を記述します。
評価式が値1の時は処理1を実行し、
値2の時は処理2を実行。
いずれの値にも一致しない場合はDefault部分の処理が実行されます。
処理が終わった後にswitch文を抜け出したい場合、 最後にbreak文を記述します。 breakが無いとswitch文を抜けずに次の値の評価に移ります。 ただし意図的にbreakを書かずに次の値を評価することも可能です。
次のサンプルコードは、 数値の入った変数$seasonの値が 0, 1, 2, 3のいずれかによって処理を分岐しています。
$season = 3 switch ($season) { 0 { Write-Host "春"; break } 1 { Write-Host "夏"; break } 2 { Write-Host "秋"; break } 3 { Write-Host "冬"; break } Default {Write-Host "その他"} } # 実行結果 冬
次は文字列を評価する場合です。
文字列の入った変数$strの値がa, b, c, dのいずれかによって
処理を分岐しています。
文字列の場合、値を""ダブルクォートや''シングルクォートで囲む
必要がありません。
$str = "d" switch ($str) { a { Write-Host "a"; break } b { Write-Host "b"; break } c { Write-Host "c"; break } d { Write-Host "d"; break } Default {Write-Host "other"} } # 実行結果 d
Nullや空文字を値の部分に記述する場合、 Nullは「$null」、空文字は「"" または ''」と記述します。 下のコードでは空文字に""ダブルクォートを使っています
$s = $null switch ($s) { a { Write-Host "a"; break } $null { Write-Host "Null"; break } "" { Write-Host "Empty"; break } Default {Write-Host "other"} } # 実行結果 Null
break文あり・なしの動作
break文のあり・なしでどうようにswitch文の動作が違うのかを 具体的に見ていきます。
次のコードは変数$nの値によって処理が分岐しますが、 値の部分はわざと同じ値の「0」にしています。 処理Aの後にはbreak文がなく、 処理Bと処理Cの後にはbreak文があります。 このコードを実行するとどうなるでしょうか?
$n = 0 switch ($n) { 0 { Write-Host "処理A" } 0 { Write-Host "処理B"; break } 0 { Write-Host "処理C"; break } Default {Write-Host "その他"} } # 実行結果 処理A 処理B
1番目の値「0」はTrueなので処理Aを実行します。
処理Aを実行した後、break文がないので次の評価に移ります。
2番目の値「0」評価した結果、今度もTrueなので処理Bを実行します。
処理Bの後にbreak文があるためここでswitch文を抜け出します。
そのため処理Cは実行されません。
結果的に処理A, Bまでが実行されます。
このようなbreak文の動きを利用して、 わざとswitch文のステートメントブロックを複数実行させることも できます。