PowerShell - 迴圈與判斷式

來來來,今天限量要來講一下PowerShell的迴圈與判斷式語法,迴圈與判斷式是任何程式語言中的基礎中的基礎,有了迴圈與判斷式才有邏輯的產生,才有整個應用程式的靈魂。下面就開始講PowerShell的迴圈與判斷式。

判斷式

判斷式主要由condition和Action組成,condition可將邏輯分為多個branch,而每個branch就有不同的Action運作,組成一個複雜的邏輯架構。判斷是語法有If...Else與Switch兩種語法,但其實兩種表達的意思是相同的,只是使用上的習慣,下列為兩種語法的使用方法:

If...Elseif...Else

IF判斷式在許多程式語言裡都可以看到,表達方式其實都大同小異,語法如下:


If(<condition1>) 
{
    <Action1>
} 
Elseif(<condition2>) 
{
    <Action2>
} 
Else 
{
    <Action3>
}

If與Elseif括弧內的condition要是Boolean值的資料型態,Action為該條件下要進行的動作,有幾個N個條件就有1個If,N-1個Elseif,最後的Else則放在所有condition外要進行的動作。

Switch

Switch是IF...ELSE判斷式的進階版,如果有多種判斷條件時,推薦使用Switch效能會比較好,Switch語法如下:


Switch(<variable>)
{
    <case1> { <Action1> }
    <case2> { <Action2> }
    <case3> { <Action3> }
    Default { <Action4> }
}

上面的判斷式就可以看出和其他程式語言的不同,一般的程式語言都要加case <X>: <Action> break;,就和PowerShell字串可以直接和變數連接一樣,這也算PowerShell較特別的部份。最後一個為Default,Default就和If...Else判斷式中的Else是一樣的,在condition外的所有狀況下進行Default的動作。


迴圈

迴圈控制了軟體的生命週期,當一個軟體沒有迴圈控制,就會一路順著流程走道最後結束,除此之外,迴圈也可以用來進行重複的運算,減少重複的操作。迴圈基本上有ForEach, While, For這三種語法,

For

For是記數迴圈的一種語法,隨著迴圈次數的增加,記數變數的值也會根據迴圈而改變,記數變數為整數型態,語法如下:

For(<variable initial>; <condition>; <variable action>)
{
    Loop Action
    ...
}

範例:

$sum = 0
For($i = 1; $i -le 10; $i++)
{
    $sum += $i
}
echo $sum

執行結果:


另外,For也可以用來表示一個無窮迴圈,語法如下:

For(;;)
{
    Loop Action
}

ForEach

ForEach主要是用在集合的遍歷(Iteration)中使用,依序讀取出集合中的每個物件,所以變數的資料型態是根據集合中的物件所決定,語法如下:


ForEach(<variable> in <object collection>)
{
    Loop Action
}


範例:


$array = 1, 'a', 2, 'b'
ForEach($obj in $array)
{
    echo $obj
}

執行結果:

While

While為判斷式迴圈的語法,每次進入迴圈前會先判斷condition是否成立,如果成立則進入迴圈,每一次結束後再回到迴圈判斷式,語法如下:


While(<condition>)
{
    Loop Action
}


Do...While

DoWhile與While是一樣的,但差別在於DoWhile是在每次迴圈執行結束後再去判斷condition是否成立,如果成立再繼續下一輪,所以對於一個錯誤的condition,While不會執行任何一次,而DoWhile會執行一次,語法如下:


Do {
    Loop Action
} While(<condition>)


Do...Until

DoUntil和DoWhile是一體兩面的,按照中文解釋來看,DoWhile是"做...事當...時成立",DoUntil的解釋是"做...事直到...成立",一般程式語言沒有這種語法,簡單來說DoWhile的condition外加上一個-not就等於DoUntil



迴圈相關修飾詞 Continue, Break

進入迴圈後,並不是一定要在迴圈condition不成立的情況下才能跳出迴圈,Continue與Break就是用來額外做迴圈內流程控制的修飾詞。


Continue

如果你學過Java或C#都知道Continue的意義是什麼,Continue的意思就是跳過這輪迴圈,直接回到迴圈判斷式,下列舉個例子:

For($i = 0; $i -lt 10; $i++)
{
    If($i -eq 5)
    {
        Continue
    }
    echo $i
}

範例中,當$i等於5的時候,就會執行Continue,此時Continue後面的所有動作皆不會執行,所以結果5會沒有印出來。
執行結果:

Break

Break與Continue的功能是差不多的,就差在Break一但出去之後就不會再進來,就像變了心的女朋友回不來了,所以Break也可以放在If和Switch的Action區塊中,下列範例我們用Continue的範例改成Break:



從結果可以看到當$i到5的時候,Break會跳出迴圈,所以包含5之後的6,7,8,9,10皆沒印出來。

終於,PowerShell的基本語法就告一段落,掌握這些基本語法之後就可以創造出許許多多的PowerShell功能Script,之後限量會再進入更深層的PowerShell應用,至於何時就要等限量領悟到一定程度囉。


參考來源:

留言