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文を入れ子にする(ネストする)方法)