PowerShell: if文の書き方(if、else、elseif)
プログラミングで欠かせない条件分岐の方法の1つとしてif文があります。 ここではPowerShellでのif文の基本的な書き方を紹介します。 大きく分けて次の3つの書き方 「if~」「if~else~」「if~elseif~else~」があるので、 それぞれについて説明していきます。
if文
if (条件式) { 処理 }
条件式が1つで、それ以外がない場合の書き方です。 条件式を()丸括弧で括り、 条件式の後に波括弧{}で処理部分を括ります。 PowerShellでは()丸括弧と{}波括弧のどちらも省略することはできません。
{}波括弧で括られた部分をスクリプトブロックと言い、 条件式がTrueの時に、スクリプトブロックに書かれた処理が実行され、 処理部分は複数の処理を記述する場合もあります。 処理部分が1行しかない場合でも{}波括弧は必要です。
PowerShellのif文では{}を書く位置に特に決まりはありません。 条件式の後に改行を入れて次のように記述する人もいます。
if (条件式) { 処理 }
条件式の前後に()丸括弧を付け忘れると次のようにエラー 「Missing '(' after 'if' in if statement.」が発生します。
# 条件式の前後に()が無い if $n -ge 5 { Write-Host "5以上です。" } # 実行結果(エラーメッセージ) Line | 1 | if $n -ge 5 { | ~ | Missing '(' after 'if' in if statement.
同様に条件式の後に{}波括弧を付け忘れても エラー「Missing statement block after if ( condition ).」が発生します。
# 条件式の後に{}波括弧が無い if ($n -ge 5) Write-Host "5以上です。" # 実行結果(エラーメッセージ) Line | 1 | if ($n -ge 5) | ~ | Missing statement block after if ( condition ).
次のサンプルコードでは、 if文を使って変数$nが5以上の場合のみ メッセージを表示します。
$n = 10 if ($n -ge 5) { Write-Host "5以上です。" } # 実行結果 5以上です。
if~else~文
次は「else」を使った条件式です。 elseには「それ以外」という意味があります。 条件式が真か偽かで処理を分岐する場合に使います
if (条件式) { 処理A } else { 処理B }
もし条件式がTrueなら条件式直後のスクリプトブロック処理Aを実行し、 それ以外(条件式が偽)なら処理Bを実行します。 つまり「〇〇か、〇〇以外か」で処理を分岐したい時に使います。
次のサンプルコードでは「if~else~」を使って、 変数$nが5以上か、それ以外(5より小さい)かで 異なるメッセージを表示しています。
$n = 4 if ($n -ge 5) { Write-Host "5以上" } else { Write-Host "5より小さい" } # 実行結果 5より小さい
if~elseif~else~文
条件式が2つ以上ある場合は「elseif」 を使って処理を細かく分岐することができます。
if (条件式A) { 処理A } elseif (条件式B){ 処理B } else { 処理C }
条件式AがTrueの場合は処理Aを実行し、 条件式BがTrueの場合は処理Bを実行、 それ以外は処理Cを実行します。 例えば「変数Xの値が1か、2か、それ以外か」 といった分岐処理を行います。
「elseif {}」の部分は複数記述することが可能です。 ただし、あまりに「elseif {}」による分岐条件が多いとコードが見にくくなるため、 switch文を使うケースもあります。
次のサンプルコードでは、 elseifを使って変数$nが「1か、2か、3か、それ以外か」 で異なるメッセージを表示します。elseifを2回使っています。
$n = 4 if ($n -eq 1) { Write-Host "1です" } elseif ($n -eq 2){ Write-Host "2です" } elseif ($n -eq 3){ Write-Host "3です" } else { Write-Host "その他です" } # 実行結果 その他です
(まとめ記事: PowerShell if)