天地有情

PowerShell 制御文

PowerShell 制御文

条件分岐構文としてif ~ elseif ~ else,switch ~ case命令,
ループ構文としてfor,foreach,while,do ~ while命令と,おなじみの制御構文が提供されています.

■ if/elseif/else文

if文は,条件分岐をする上で欠かせないものです.

==========================================
if (<条件>)
{
  ifの条件が満たされた場合に実行されるコードブロック
}
elseif (<条件>)
{
  elseifの条件が満たされた場合に実行されるコードブロック
}
else
{
  前の条件がいずれも満たされない場合に実行されるコードブロック
}

==========================================

例:

$x = 100
if($x -ge 80)
{
Write-Output '変数$xは80以上です。'
}
elseif($x -ge 40)
{
Write-Output '変数$xは40以上80未満です。'
}
else
{
Write-Output '変数$xは40未満です。'
}

(注)Write-Output の代わりに Write-Host, Write, echo を使っても良いです.

結果:
変数$xは80以上です。


■ for文
forは基本的なループです.

==========================================
for (<初期化式>; <終了条件>; <増分式>)
{
  繰り返し実行するコードブロック
}

==========================================

例:

for ( $i = 0; $i -lt 5; $i++ )
{
Write-Output ("カウント" + $i)
}

結果:
カウント0
カウント1
カウント2
カウント3
カウント4


■ while文

whileは指定した条件がtrueの場合にループし続けます.

==========================================
while (条件)
{
  繰り返し実行するコードブロック
}

==========================================

例:

$i=0;
$sum=0;
$ary=@(100,120,300)
while($i -lt 3)
{
$sum += $ary[$i]
$i++
}
Write-Output $sum

結果:
520


■ do/while文

while文は最初に評価が行われるループでした.do/while文は最後に評価が行われるループです.
最後の評価が「偽」となった時点でループを終了します.よって,必ず1回は処理の実行を行います.

==========================================
do
{
  繰り返し実行するコードブロック
}
while (条件)

==========================================

例:
$i = 0
do
{
Write-Output $i
$i++
}
while ($i -lt 5)

結果:
0
1
2
3
4

■ foreah文

foreachはコレクション(集合体)に含まれるすべての項目を順番に処理します.

==========================================
foreach ($<項目> in $<コレクション>)
{
  繰り返し実行するコードブロック
}

==========================================
よく知られたコレクションの一つに配列があります.

例(1):

$ary=@(100,120,300)
foreach($dat in $ary)
{
$sum += $dat;
}
Write-Output $sum

結果:
520

例(2):
foreach ( $s in Get-Service )
{
if ($s.Status -eq "running")
{
Write-Output $s.ServiceName
}
}


■ break文とcontinue文

breakはループ制御(foreach,for,while,do)およびswitchのコードブロック内で出現した場合,
そこでそのコードブロックを終了します.


例:
for ( $i = 0; $i -lt 5; $i++ )
{
if ( $i -eq 3 )
{
break
}
Write-Output $i
}

結果:
0
1
2

continueが実行されると,実行フローはループの先頭へ移動し,次の反復処理を行います.
breakと異なるのは,ループを終了しないことです.

例:
for ( $i = 0; $i -lt 10; $i++ )
{
if ( $i % 2 )
{
continue
}
Write-Output $i
}

結果:
0
2
4
6
8

■ switch文

他の言語同様,処理を分岐するほか,パターン照合や反復を行うことも可能です.

==========================================
switch -options (評価する式)
{
<パターン> {実行するコマンドブロック}
<パターン> {実行するコマンドブロック}
   :
default {実行するコマンドブロック}
}

==========================================

例(1):
$Year = 2013
switch ( $Year )
{
2012 { Write-Output "辰" }
2013 { Write-Output "巳" }
2014 { Write-Output "午" }
}

結果:


例(2):
$Year = 2013
switch ( $Year )
{
2012 { Write-Output "辰" }
2013 { Write-Output "巳" }
2013 { Write-Output "This Year!"}
2014 { Write-Output "午" }
}

結果:

This Year!

例(3):
$Year = 2013
switch ( $Year )
{
2012 { Write-Output "辰" }
2013 { Write-Output "巳"; break }
2013 { Write-Output "This Year!"}
2014 { Write-Output "午" }
}

結果:


例(4):
$Year = 2011
switch ( $Year )
{
2012 { Write-Output "辰" }
2013 { Write-Output "巳" }
2014 { Write-Output "午" }
default { Write-Output "一致パターンなし" }
}

結果:
一致パターンなし

例(5):
switch -case ("SCRIPT")
{
"script" {"小文字の方に一致"}
"SCRIPT" {"大文字の方に一致"}
default {"一致なし"}
}

結果:
大文字の方に一致

通常,switch文は大文字と小文字を区別しません.大文字と小文字を区別するには,
-casesensitiveオプションを使用します


例(6):
switch -wildcard ("Windows")
{
"W*" { Write-Output "Wで始まる"}
"*s" { Write-Output "sで終わる" }
}

結果:
Wで始まる
sで終わる

-wildcardオプションを使用すると,ワイルドカードによるパターン一致の評価を行うことができます.

例(7):
switch -regex ("Windows")
{
"(^W)" {"Windows"}
}

結果:
Windows

-regexオプションを使用すると,正規表現によるパターン一致の評価を行うことができます.
スポンサーサイト
  1. 2013/06/13(木) 07:47:49|
  2. PowerShell
  3. | トラックバック:0
  4. | コメント:0
<<PowerShell から外部プログラムを実行する | ホーム | PowerShell の関数定義>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://konoyonohana.blog.fc2.com/tb.php/31-371e59d3
この記事にトラックバックする(FC2ブログユーザー)