PowerShellの開発でお困りのことはありませんか?
そんな悩みは
当サイトで解決!!
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です
|