PowerShell: while文、do-while文、do-until文によるループ

PowerShellで繰り返し処理を行う際に使える while文・do-while文・do-until文の3つについて解説します。 表現は似ていますがそれぞれ動作が異なり、 doは「~する」、whileは「~の間」、untilは「~まで」という意味があります。
この3つのループ文を使う際は、ループの終了条件や ループカウンタの管理を適切に行って無限ループにならないように 注意してください。

while文

書式
while (条件式) {
	繰り返したい処理
}

while文ではwhileの後ある条件式がTrueの間、 スクリプトブロックが繰り返し実行されます。 条件式がFalseになるとwhile文を抜け出します。 条件次第では処理が1度も実行されない場合があります。

次のコードはwhile文を使って変数$iが3より小さい間、 ループを継続します。

$i = 0

while ($i -lt 3) {
	Write-Host $i
	$i++
}

# 実行結果
0
1
2

do-while文

書式
do {
	繰り返したい処理
} while (条件式)

do-while文はスクリプトブロック内の処理を1度実行した後、 条件式を評価して条件式がTrueの間、ループを継続します。 while文との違いは、 最低でも1度はスクリプトブロックが実行されることです。

次のコードはdo-while文の具体例です。

$i = 0

do {
	Write-Host $i
	$i++
} while ($i -lt 3)

# 実行結果
0
1
2

do-until文

書式
do {
	繰り返したい処理
} until (条件式)

do-until文はスクリプトブロック内の処理を1度実行した後、 untilの後に記述した条件式がTrueになるまでループを継続します。 逆に言うと条件式がFalseの間ループを継続すると言えます。
英単語whileは「~の間」、untilは「~まで」という逆の意味になります。

次のコードはdo-untilを使って変数$iが 「3以上になるまで」ループを継続します。 do-while文との条件式の書き方の違いに注目してください。

$i = 0
do {
	Write-Host $i
	$i++
} until ($i -ge 3)

# 実行結果
0
1
2

上のdo-while文とdo-until文のサンプルコードの実行結果は一緒です。 ですが条件式は do-whileが($i -lt 3)、do-untilが($i -ge 3)というように 真逆になるので注意が必要です。 一般的にはdo-untilよりもdo-whileの方が使われます。

break, continue

while, do-while, do-untilのいずれのループも途中で抜け出す場合はbreak、 次のループへ進む場合はcontinueを使用します。

PowerShell