HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


PowerShellの開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > PowerShell Tips > 制御構文 Tips メニュー

02.switchステートメント

 
UPDATE:2007/11/24    
 


 switchステートメントを使用すると、複数のifステートメントを処理することができます。switchステートメントは事実上の一連のif ステートメントです。 式と各条件を個別に照合し、一致するものが見つかると、その条件に関連づけられたアクションが実行されます。

sample1 では 変数 $a の値が 3 のときに "$aは3です"と表示します。

switchステートメントは上から順に評価していきます。
$a が 1 かどうかを評価し、偽なので次の行へ
$a が 2 かどうかを評価し、偽なので次の行へ
$a が 3 かどうかを評価し、3なので(真){}の中の Write-Host "$a は 3です" を実行します。

sample1

PS C:\Users\HIRO> $a = 3
PS C:\Users\HIRO> switch ($a) {
>> 1 { Write-Host "$a は 1です" }
>> 2 { Write-Host "$a は 2です" }
>> 3 { Write-Host "$a は 3です" }
>> 4 { Write-Host "$a は 4です" }
>> 5 { Write-Host "$a は 5です" }
>> }
>>
3 は 3です

default句

sample2では、どの値にも該当しなかった場合の処理を追加しています。
変数 $a に -3を入れておいて、上から順に評価を行っていきます。
1, 2, 3 と評価していき、該当する値がないときに、"該当する値がありません" と表示しています。
default句を使用すると、どの値にも該当しなかった場合の処理を行うことができます。

sample2

PS C:\Users\HIRO> $a = -3
PS C:\Users\HIRO> switch ($a) {
>> 1 { Write-Host "$a は 1です" }
>> 2 { Write-Host "$a は 2です" }
>> 3 { Write-Host "$a は 3です" }
>> default { Write-Host "該当する値がありません" }
>> }
>>
該当する値がありません

breakキーワード
 一致するものが複数見つかった場合には、一致ごとに式が実行されます。
 これを回避するには、breakキーワードを使用します。

breakキーワードは、これ以上処理が行われず、switch ステートメントが終了することを意味します。

sample3

PS C:\Users\HIRO> $a = -3
PS C:\Users\HIRO> switch ($a) {
>> -1{ Write-Host "$a は -1です"; break }
>> -2{ Write-Host "$a は -2です"; break }
>> -3{ Write-Host "$a は -3です"; break }
>> default{ Write-Host "該当する値はありませんでした"; break }
>> }
>>
-3 は -3です

-casesensitiveオプション
 -casesensitiveオプションは、一致する句が文字列の場合は、大文字と小文字を区別します。文字列でない場合はこのオプションは無視されます。

sample4

PS C:\Users\HIRO> $a = "HIRO"
PS C:\Users\HIRO> switch -casesensitive ($a) {
>> "hiro" { Write-Host "hiro に一致しました" }
>> "HIRO" { Write-Host "HIRO に一致しました" }
>> default{ Write-Host "一致しませんでした" }
>> }
>>
HIRO に一致しました

-wildcard
 -wildcardオプションはワイルドカードを使って一致判定を行います。

sample5

PS C:\Users\HIRO> $a = "HIRO"
PS C:\Users\HIRO> switch -wildcard ($a) {
>> "HI*O" { Write-Host "HI*Oに一致しました" }
>> default { Write-Host "一致しませんでした"}
>> }
>>
HI*Oに一致しました

-regexオプション
 -regexオプションを使用すると正規表現を使って一致判定を行います。

sample6

PS C:\Users\HIRO> $a = "HIRO"
PS C:\Users\HIRO> switch -regex ($a) {
>> "^H.*" { Write-Host "先頭がHです" }
>> default { Write-Host "HIROではありません" }
>> }
>>
先頭がHです