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

PowerShell
PR