又到了PowerShell的專屬章節了,這次限量要來簡單的講解PowerShell的運算子(Operator),運算子是所有學數學邏輯都要用到的關鍵元素,許多人常常會把運算子(Operator)與運算元(Operand)搞混,因為中文翻譯得很像且連英文名稱都很像,這邊再簡單澄清一下運算元與運算子的定義。假設一個運算式1 + 2 * 3,則+和*就是運算子,也就是把運算元拿來彼此之間做運算;1, 2, 3就是運算元,每個運算元各自代表一個值。
但這篇不是要來解釋運算子和運算元的關係,PowerShell也算是一種程式語言,也少不了有邏輯數值運算,所以一定有運算子。如同一般程式語言一樣,PowerShell有算術運算子, 邏輯運算子...等,算術運算子就是+-*/%運算,這些基本運算限量就BJ4(不解釋)了,重點是要放在邏輯運算子與其他運算子上,因為PowerShell在這些運算子的表達方式上有點不同。
因為PowerShell裡也整合了.Net的Library,所以如果不想用PowerShell的-replace也可以直接在PowerShell用.Net的Replace方法,所以C#的方法也可以直接在PowerShell上使用,程式碼就會變成
範例:
範例:
範例中如果我們輸入A為1, B為0的話,結果會印出-2與0,-2為1的binary not值,將00000000轉換成11111111;0為1和0的binary and值,將00000001與00000000進行and運算,結果得到00000000。
範例:
範例中,我們輸入一個數字字串,程式會去判斷是否為string型別,如果是就將string轉型為int進行數值運算。
上述程式碼的結果會印出1 2 3 4 5,使用@(1..5)代表將1~5之間的數值Assign給變數$ary。(注意:範圍運算子的範圍只能以整數表示)
"格式規則字串" -f 字串1, 字串2...
範例:
執行結果:
關於格式機制的識別字可參考 ToString方法的數值格式化與日期格式化 參考來源:
Windows PowerShell講座(6)—運算子(上)
Windows PowerShell 講座 (7)—運算子(下)
但這篇不是要來解釋運算子和運算元的關係,PowerShell也算是一種程式語言,也少不了有邏輯數值運算,所以一定有運算子。如同一般程式語言一樣,PowerShell有算術運算子, 邏輯運算子...等,算術運算子就是+-*/%運算,這些基本運算限量就BJ4(不解釋)了,重點是要放在邏輯運算子與其他運算子上,因為PowerShell在這些運算子的表達方式上有點不同。
比較運算子
比較運算子就是>, <, =...等,通常用於If...Else判斷式中來決定不同流程的走向,下表為PowerShell與C#比較運算子的表達方式:
運算子
|
C#
|
PowerShell
|
等於
|
==
|
-eq
|
不等於
|
!=
|
-ne
|
大於等於
|
>=
|
-ge
|
大於
|
>
|
-gt
|
小於
|
<
|
-lt
|
小於等於
|
<=
|
-le
|
相似
|
-like
|
|
不相似
|
-notlike
|
|
包含
|
a.Contain(b)
|
-contains
|
不包含
|
!a.Contain(b)
|
-notcontains
|
符合
|
-match
|
|
不相符
|
-notmatch
|
其中要特別講解like, match,因為C#沒有提供相關類似操作,like就像SQL語法的LIKE語法一樣,須給定一個範圍,接著再去判斷字串是否符合範圍。
範例:
上述範例的結果會印出True,因為Hello World字串裡包含了el字串,所以符合條件。
like為一種Wildcard Search,在上面範例中,搜尋的Pattern為*el*,這代表在判斷搜尋時,不管字串裡的el指定字串前後是否有其他字元,皆符合條件;如果搜尋的Pattern為*el,則代表字尾為el的字串才符合;反之,Pattern為el*,代表字首為el的字串才符合。
match在當有提供正規表示式(Regular Expression)的情況下使用,用來判斷字串是否符合正規表示式的規則。
範例:
上述範例的結果會印出False,因為限量在這指定的正規表示式的規則為字串開頭要以A為開頭,Hello World不符合條件。
範例:
$source = "Hello World" If($source -like "*el*") { echo "True" } Else { echo "False" }
上述範例的結果會印出True,因為Hello World字串裡包含了el字串,所以符合條件。
like為一種Wildcard Search,在上面範例中,搜尋的Pattern為*el*,這代表在判斷搜尋時,不管字串裡的el指定字串前後是否有其他字元,皆符合條件;如果搜尋的Pattern為*el,則代表字尾為el的字串才符合;反之,Pattern為el*,代表字首為el的字串才符合。
match在當有提供正規表示式(Regular Expression)的情況下使用,用來判斷字串是否符合正規表示式的規則。
範例:
$source = "Hello World" If($source -match "^A") { echo "True" } Else { echo "False" }
上述範例的結果會印出False,因為限量在這指定的正規表示式的規則為字串開頭要以A為開頭,Hello World不符合條件。
替代運算子
替代運算子-replace是字串用來替代掉某些字元的運算子,相對於C#的String型別所提供的Replace方法,使用規則如下:
$承接變數 = "<來源字串>" -replace "欲替代字串", "替代字串"
範例:
PowerShell =>
$source = "Hello World" $str = $source -replace "World", "PowerShell" echo $str
C# =>
var source = "Hello World"; var str = source.Replace("World", "PowerShell"); Console.WriteLine(str);
因為PowerShell裡也整合了.Net的Library,所以如果不想用PowerShell的-replace也可以直接在PowerShell用.Net的Replace方法,所以C#的方法也可以直接在PowerShell上使用,程式碼就會變成
$source = "Hello World" $str = $source.Replace("World", "PowerShell") echo $str
邏輯運算子
邏輯運算子大家都知道是AND, OR, NOT運算,也知道在程式語言裡的表示方法為&&, ||, !,但PowerShell就不是這樣表達的,下表為PowerShell與C#邏輯運算子的表達方式:
運算子
|
C#
|
PowerShell
|
AND
|
&&
|
-and
|
OR
|
||
|
-or
|
NOT
|
!
|
-not或!
|
XOR
|
^
|
-xor
|
範例:
[int] $inputA = Read-Host "Enter number A:" [int] $inputB = Read-Host "Enter number B:" If($inputA -is [int] -and $inputB -is [int]) { echo "Correct" } Else { echo "Error Type" }
位元運算子
位元運算子是用來進行二進制運算的運算子,下表為PowerShell與C#位元運算子的表達方式:
運算子
|
C#
|
PowerShell
|
Binary
AND
|
&
|
-band
|
Binary
OR
|
|
|
-bor
|
Binary
NOT
|
~
|
-bnot
|
Binary
XOR
|
^
|
-bxor
|
範例:
[int] $inputA = Read-Host "Enter number A:" [int] $inputB = Read-Host "Enter number B:" echo (-bnot $inputA) echo ($inputA -band $inputB)
範例中如果我們輸入A為1, B為0的話,結果會印出-2與0,-2為1的binary not值,將00000000轉換成11111111;0為1和0的binary and值,將00000001與00000000進行and運算,結果得到00000000。
型別運算子
型別運算子主要是來比較型別之間是否相等或型別之間的轉換,下表為PowerShell與C#型別運算子的表達方式:
運算子
|
C#
|
PowerShell
|
IS
|
is
|
-is
|
ISNOT
|
!(is)
|
-isnot
|
AS
|
as
|
-as
|
範例:
$input = Read-Host "Enter number string:" If($input -is [string]) { $num = $input -as [int] echo ($num * 100) }
範例中,我們輸入一個數字字串,程式會去判斷是否為string型別,如果是就將string轉型為int進行數值運算。
範圍運算子
範圍運算子..,就是設定一個範圍區間內的數值給陣列,例如:$ary = @(1..5) Foreach($i in $ary) { echo $i }
上述程式碼的結果會印出1 2 3 4 5,使用@(1..5)代表將1~5之間的數值Assign給變數$ary。(注意:範圍運算子的範圍只能以整數表示)
格式運算子
格式運算子-f,就是可以將.Net格式機制在PowerShell也能使用,如日期字串的格式, 數值字串的格式...等。使用規則如下:"格式規則字串" -f 字串1, 字串2...
範例:
echo ("{0:c}" -f 100) $date = Get-Date echo ("{0:D}" -f $date) echo ("{0:N3}" -f (10/3)) echo ("{0:x}" -f 255) echo ("{0:p}" -f 0.99)
執行結果:
關於格式機制的識別字可參考 ToString方法的數值格式化與日期格式化 參考來源:
Windows PowerShell講座(6)—運算子(上)
Windows PowerShell 講座 (7)—運算子(下)
留言
張貼留言