PowerShell: switch文で複数の条件式をandやorで繋ぐ
PowerShellのswitch文では、 複数の条件式を論理演算子のandやorでつなぐことも出来ます。 つまり算術演算子による条件式を論理演算子でつなぐという、 複雑な条件式を作れます。 この場合の記述方法や注意点を解説します。
まずはswitch文の書式からです。
書式
switch (評価式) { {条件式1} { 処理1; break } {条件式2} { 処理2; break } {条件式3} { 処理3; break } ... Default {処理} }
条件式で算術演算子などを使う場合、 条件式を{}波括弧で囲む必要がある点に注意してください。 {条件式}の部分をさらに()丸括弧で囲んで ({条件式})と記述することもできます。
複数の条件式をつなぐ書き方
例えば、評価式の値が「1または2」を条件とする場合、 条件式部分は「-or」を使って次のように記述します。
{$_ -eq 1 -or $_ -eq 2}
$_ には現在評価中の値が格納されています。
「switch (評価式)」の評価式の値です。
()丸括弧で囲んで次のようにも記述できます。
({$_ -eq 1 -or $_ -eq 2})
次に評価式の値が「10以上20以下」を条件とする場合、 条件式部分は「-and」を使って次のように記述します。
{$_ -ge 10 -and $_ -le 20} # 又は ({$_ -ge 10 -and $_ -le 20})
複数の条件式をandやorで繋ぐと、 条件式が長くなる事があります。 その時は改行して複数行にしてあげると見やすくなります。 複数行にする場合、行末に特に記号を付ける必要はなく 単に改行すれば良いだけです。
# 1行 ({$_ -ge 10 -and $_ -le 20}) # 複数行 ({$_ -ge 10 -and $_ -le 20})
サンプルコード
次のサンプルコードでは変数$numを評価します。 そして$numが「10以下」「11から20」「21から30」「31以上」の 4つの条件に分けます。 2番目と3番目の条件は「-and」を使っています。
$num = 25 switch ($num) { ({$_ -le 10}){Write-Host "10以下"; break} ({$_ -ge 11 -and $_ -le 20}){ Write-Host "11から20"; break} ({$_ -ge 21 -and $_ -le 30}){ Write-Host "21から30"; break} ({$_ -ge 31}){Write-Host "31以上"; break} default {Write-Host "other"} } # 実行結果 21から30
上のコードはごちゃごちゃしていて見にくいと思います。 このような場合、条件式部分と処理部分を別の行にして、 さらにブロックごとに行間を空けてあげると見やすくなります。 例えば次のような書き方です。
switch ($num) { ({$_ -le 10}) {Write-Host "10以下"; break} ({$_ -ge 11 -and $_ -le 20}) {Write-Host "11から20"; break} ({$_ -ge 21 -and $_ -le 30}) { Write-Host "21から30"; break} ({$_ -ge 31}) {Write-Host "31以上"; break} default {Write-Host "other"} }