PowerShell: if文まとめ
PowerShellでのif文の書き方、1行での記述、何もしない場合、 True・False・Nullの判定、 比較演算子・論理演算子の使用、入れ子にする方法をまとめて紹介します。
if文の書き方
PowerShellのif文では条件式を丸括弧()で括り、 処理部分を波括弧{}で括ります。 どちらも省略することはできません。 波括弧{}で括られた部分をスクリプトブロックと言います。
if文
if (条件式) { 処理 }
$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」と記述します。
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文を入れ子にする(ネストする)方法)