PowerShell: if文まとめ

PowerShellでのif文の書き方、1行での記述、何もしない場合、 True・False・Nullの判定、 比較演算子・論理演算子の使用、入れ子にする方法をまとめて紹介します。

if文の書き方

PowerShellのif文では条件式を丸括弧()で括り、 処理部分を波括弧{}で括ります。 どちらも省略することはできません。 波括弧{}で括られた部分をスクリプトブロックと言います。

if文

書式
if (条件式) {
	処理
}
PowerShell
$n = 10

if ($n -ge 5) {
	Write-Host "5以上です。"
}

# 実行結果
5以上です。

if~else~文

書式
if (条件式) {
	処理A
} else {
	処理B
}
$n = 4

if ($n -ge 5) {
	Write-Host "5以上"
} else {
	Write-Host "5より小さい"
}

# 実行結果
5より小さい

if~elseif~else~文

書式
if (条件式A) {
	処理A
} elseif (条件式B){
	処理B
} else {
	処理C
} 
$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 "その他です"
}

# 実行結果
その他です

(詳細記事:if文の書き方(if、else、elseif)

1行で書く

if文で1行で書く

1行で書く場合も、丸括弧()と波括弧{}は必ず書く必要があります。

書式
if (条件式) {処理}
# 1行
if ($n = 3) {$a = 100}

# 複数行で書く場合
if ($n = 3) { 
	$a = 100
}

三項演算子で1行で書く

三項演算子の場合は「?クエスチョンマーク」と「:コロン」を使って次のように記述します。

書式
条件式 ? True時の式 : False時の式
($n -eq 5) ? "Yes": "No" 

式の結果を変数に代入したい場合は次のように記述します。

$n = 4

$a = ($n -eq 5) ? 100 : 200

$a  # 200

(詳細記事:ifステートメントを1行で書く

if文で「何もしない」場合

PowerShellでは何もしない場合は何も書く必要はありませんが、 波括弧{}は省略できません。 Pythonでの「pass」のような文はありませんが、 何もしない旨の コメントは入れておいた方がわかりやすくなります。

$n = 6

if ($n -eq 5) {
	$a = 10
} elseif ($n -eq 6) {
	# 何もしない
} else {
	$a = 20
}

(関連記事:ifやswitchの条件分岐で「何もしない」場合

if文でTrue・False・Nullを判定する

最初に注意点として、PowerShellでTrue、False、Nullを表す場合は、 $true、$false、$nullのように先頭に$記号を付ける必要があります。 それぞれPowerShellのシェル変数の1つです。 間違ってTrue、False、Nullと記述すると機能しません。

True・Falseを判定

真偽値型の変数$blnがTrueかFalseかを判定するコードは 次のように丸括弧()の中に「$bln」と記述します。

PowerShell
if ($bln) {
	# Trueの場合
} else {
	# Falseの場合
}

Flaseの場合だけを知りたい時は、 論理否定演算子の「-not」か「-!」を$blnの前に記述します。

if (-! $bln){
	# Falseの場合
	Write-Host "False"
}

Nullを判定

if ($null -eq $a){
	Write-Host "Null"
} else {
	Write-Host "Not Null"
}

Nullは$nullと記述します。 さらに$nullは左側に記述することがベストプラクティスとされています。

(詳細記事:if文でTrue・False・Nullを判定する

比較演算子(-eq -ne -gt -ge -lt -le)

PowerShellで使用する比較演算子の意味と英語、 他のプログラミング言語で使われる一般的な記号は次の通りです。
各比較演算子の頭に「ハイフン(-)」を付けるのを忘れないでください。

比較演算子意味英語一般的な記号
-eq等しいequal=, ==
-ne等しくないnot equal<>, !=
-gtより大きいgreater than>
-ge以上greater than or equal>=
-ltより小さいless than<
-le以下less than or equal<=

文字列比較(「c」と「i」)

文字列を比較する場合、デフォルトでは大文字小文字を区別しません。 大文字と小文字を区別する場合は先頭に「c」を加えて「-ceq」と記述します。

オプション意味
c大文字・小文字を区別する
i区別しない(デフォルト)
Write-Host ("a" -eq "A")  # True

Write-Host ("a" -ceq "A") # False

Write-Host ("a" -ieq "A") # True

(詳細記事:比較演算子(-eq -ne -gt -ge -lt -le)

論理演算子(-and・-or・-not)を使う

論理演算子「-and, -or, -not」の使い方です。 「- ハイフン」記号をつけ忘れないようにしてください。

-and演算子

if (($a -eq 10) -and ($b -eq 10)){
	# 処理
}

条件式が長くなる場合は無理に1行で記述せずに、 複数行に渡って書くと見やすくなります。 行末に記号を入れる必要もなく普通に改行するだけです。

if (($a -eq 10) -and 
	($b -eq 10) -and
	($c -eq 10)){
	# 処理
}

-or演算子

if (($a -eq 10) -or ($b -eq 10)){
	# 処理
}

-not演算子

if (-not $flg){
	# $flgがFalseの場合に実行される
	# 処理
}

又は次のようにも記述できます。 「-not」も()内に含まれるように記述してください。

if (-not ($flg)){
	# 処理
}

(詳細記事:if文の条件式でand・or・notを使う

if文で特定の文字列を含むかどうかを条件式にする

特定の文字列を含むかどうかによって処理を分岐させたい場合、 Containsメソッドが使えます。 Containsメソッドは検索文字列が含む場合にTrue、 含まない場合にFalseを返します。

$str = "hijklmnopqrstu"

$s = "kjm"

if ($str.Contains($s)){
	Write-Host "文字列を含む"
} else {
	Write-Host "文字列を含まない"
}

文字列を含まない時だけ処理を記述する場合

if (-! $str.Contains($s)){
	Write-Host "文字列を含まない"
}

(詳細記事: if文で特定の文字列を含むかどうかを条件式にする

if文を入れ子にする(ネストする)方法

入れ子の階層が深くなるほどコードが複雑になり、 可読性が悪くなります。 入れ子の階層に制限はありませんが、 深さは2、または3までにしておくのが妥当です。 それ以上深くなるようなら、 if文のロジック自体を考え直すことをおすすめします。

# if文の入れ子
if (条件式) {
	if (条件式) {
		処理
	}
}

次は入れ子の階層が3のコードです。

if (条件式) {
	if (条件式) {
		if (条件式) {
			処理
		}
	}
}

(詳細記事:if文を入れ子にする(ネストする)方法

PowerShell
PR