PowerShellの制御フローである if, switch, for, foreach, while の書き方について説明します。
if-elseif-else文
PowerShellのif文は一般的な言語と同じように書くことができます。 条件による分岐を追加するときは elseif を使います。
if ($false) {
"case1"
} elseif ($true) {
"case2"
} else {
"case3"
}
switch文
PowerShellのswitch文は、分岐条件に値だけではなく式を使うこともできます。
$mailaddress = "test@example.com"
switch ($mailaddress) {
{ $_.Length -le 6 } { "Invalid Length" }
"admin@example.com" { "Admin" }
default { "OK" }
}
switch文のオプションで -regex を指定すると、分岐条件の値を正規表現として入力とマッチするかを評価します。
$mailaddress = "test@example.com"
switch -regex ($mailaddress) {
"^[\w\d]+@[\w\d.]+$" { "OK" }
default { "NG" }
}
switch文のオプションで -wildcard を指定すると、分岐条件の値をワイルドカードとして入力とマッチするか評価します。
$mailaddress = "test@example.com"
switch -wildcard ($mailaddress) {
"*@*" { "OK" }
default { "NG" }
}
さらに、witch文のオプションの -file で入力ファイルを指定すると、LinuxのAWKコマンドのように、入力ファイルを1行ずつ読み込んで、パターンマッチの条件を満たすかを評価します。
PS> Get-Content C:\test\test.txt
BEGIN {
BEGIN {
hello
} END
} END
PS> switch -regex -file C:\test\test.txt {
>> "^\s*BEGIN ([^\s]+)" { "begin! {0}" -f $matches[1] }
>> "([^\s]+) END\s*$" { "end! {0}" -f $matches[1] }
>> default { $_ }
>> }
begin! {
begin! {
hello
end! }
end! }
for文
PowerShellのfor文は一般的な言語と同じように書くことができます。 条件式で使用する比較演算子が -lt などのPowerShell独自のものを使用する点は、書く際に注意が必要です。
PS> for ($i = 0; $i -lt 4; $i++) {
>> "counter=$i"
>> }
counter=0
counter=1
counter=2
counter=3
foreach文
PowerShellのforeach文も一般的な言語と同じように書くことができます。
PS> $result = (dir)
PS> foreach ($item in $result) {
>> "item=$item"
>> }
item=Desktop
item=Documents
item=Downloads
item=Favorites
...
while文
PowerShellのwhile文も一般的な言語と同じように書くことができます。 フロー制御の break と continue も同じです。
while ($true) {
$command = Read-Host "Enter your command"
if ($command -match "quit") {
break
}
}
以上です。