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"}
}
PowerShell