2017年4月2日

【PowerShell】条件分岐(switch文)


PowerShellの条件分岐、switch文の記述方法です。

switchステートメント

switch (式) {
比較値または{比較式} {左記の条件に一致した場合の処理;break}
比較値または{比較式} {左記の条件に一致した場合の処理;break}
比較値または{比較式} {左記の条件に一致した場合の処理;break}
default {どれにも一致しなかった場合の処理}
}

比較値を評価

単純に文字列を評価する例です。
$type = "O"

switch ($type){
    "A" {Write-Host "日本における $_ 型さんの割合は約40%です。";break}
    "B" {Write-Host "日本における $_ 型さんの割合は約20%です。";break}
    "O" {Write-Host "日本における $_ 型さんの割合は約30%です。";break}
    "AB" {Write-Host "日本における $_ 型さんの割合は約10%です。";break}
    default {Write-Host "$_ 型さんは分かりません。"}
}

実行結果
日本における O 型さんの割合は約30%です。

それぞれの条件に一致した場合の処理の後ろに;breakが記述されていますが、これは「この条件に一致した場合にswitchを抜ける」ということを意味しています。PowerShellでは;breakステートメントが含まれていない限り次の条件文も評価するようになっています。


配列の値を評価

次に配列の値を評価してみます。
$type = @("A","B","O","AB")

switch ($type){
    "A" {Write-Host "日本における $_ 型さんの割合は約40%です。"}
    "B" {Write-Host "日本における $_ 型さんの割合は約20%です。"}
    "O" {Write-Host "日本における $_ 型さんの割合は約30%です。"}
    "AB" {Write-Host "日本における $_ 型さんの割合は約10%です。"}
    default {Write-Host "$_ 型さんは分かりません。"}
}

実行結果はこのようになります。
日本における A 型さんの割合は約40%です。
日本における B 型さんの割合は約20%です。
日本における O 型さんの割合は約30%です。
日本における AB 型さんの割合は約10%です。

この場合、配列のすべての値を評価させたいので、;breakを記述していません。


比較式に対して評価

次に比較式に対して評価してみます。
ここではif文の時と同じ所得税率の判定をしてみます。
#所得金額(万円)
$income = 250

switch ($income) {
    #195万円以下
    {$_ -le 195} {Write-Host "5%";break}

    #195万円を超え 330万円以下
    {($_ -gt 195) -and ($_ -le 330)} {Write-Host "10%";break}

    #330万円を超え 695万円以下
    {($_ -gt 330) -and ($_ -le 695)} {Write-Host "20%";break}

    #695万円を超え 900万円以下
    {($_ -gt 695) -and ($_ -le 900)} {Write-Host "23%";break}

    #900万円を超え 1,800万円以下
    {($_ -gt 900) -and ($_ -le 1800)} {Write-Host "33%";break}

    #1,800万円を超え 4,000万円以下
    {($_ -gt 1800) -and ($_ -le 4000)} {Write-Host "40%";break}

    #4,000万円超
    default {Write-Host "45%"}
}
比較式はスクリプトブロック内に記述します。
$_には$incomeの値が格納され、評価を行っています。


-fileオプション

-fileオプションを使うことによって、ファイルの各行を式内の項目リストのように扱うことが出来ます。

たとえば、このような内容のテキストファイル(fruits.txt)があったとします。
apple
strawberry
banana
melon

このファイルを下記のように指定することが出来ます。
$fruit = "C:\work\PowerShell\fruits.txt"

switch -File($fruit){
    "apple" {Write-Host "$_ はリンゴです。"}
    "strawberry" {Write-Host "$_ はイチゴです。"}
    "banana" {Write-Host "$_ はバナナです。"}
    "melon" {Write-Host "$_ はメロンです。"}
    default {Write-Host "$_ はその他です。"}
}

実行結果はこのようになります。
apple はリンゴです。
strawberry はイチゴです。
banana はバナナです。
melon はメロンです。


その他のオプション

オプション 意味
-casesensitive 大文字/小文字を区別する
-exact 完全一致
-regex 正規表現
-wildcard ワイルドカード



スポンサーリンク