Shell 指令碼中的基本運算子


Shell 是一種介面,程式設計師可以透過它執行命令並直接與作業系統互動。Shell 指令碼是指向 Shell 發出的可執行命令。

Shell 中也存在變數和運算子,用於操作這些變數。Shell 指令碼中共有 5 種基本運算子。

  • 算術運算子
  • 關係運算符
  • 布林運算子
  • 位運算子
  • 檔案測試運算子

算術運算子

Shell 指令碼中的算術運算子用於執行一般的算術/數學運算。Shell 指令碼中共有 7 個有效的算術運算子:

  • 加法 (+) 用於將兩個運算元(變數)相加。

  • 減法 (-) 用於在 Shell 指令碼中減去兩個變數(運算元)。

  • 乘法 (*) 用於在 Shell 指令碼中將兩個變數(運算元)相乘。

  • 除法 (/) 用於在 Shell 指令碼中除以兩個變數(運算元)。

  • 取模 (%) 用於在 Shell 指令碼中查詢運算元除法的餘數。

  • 自增運算子 (++) 用於將運算元的當前值加 1。

  • 自減運算子 (--) 用於將運算元的當前值減 1。

示例

演示如何在 Shell 指令碼中實現算術運算子:

a = 32
b = 23
   add = $((a + b))
   echo sum of a and b is $add
   sub = $((a - b))
   echo Subtraction of a and b is $sub
   mul = $((a * b))
   echo product of a and b is $mul
   div = $((a / b))
   echo division of a and b is $div
mod = $((a % b))
   echo remainder when a is divided b is $mod
((++a))
   echo Increment operator when applied on "a" results into a = $a
((--b))
echo Decrement operator when applied on "b" results into b = $b

輸出

sum of a and b is 55
Subtraction of a and b is 9
product of a and b is 736
division of a and b is 1
remainder when a is divided b is 9
Increment operator when applied on a results into a = 33
Decrement operator when applied on b results into b = 24

關係運算符

Shell 指令碼中的關係運算符定義了運算元之間的關係。這些運算子的返回值根據運算子和運算元的不同,或者是真或者是假。Shell 指令碼中有 6 種有效的關係運算符:

  • == 運算子 是一個運算子,它使兩個運算子的值相等。如果值相等,則返回真,否則返回假。

  • != 運算子 是一個運算子,它使兩個運算子的值相等並檢查它們是否不相等。如果值不相等,則返回真,否則返回假。

  • < 運算子 是一個小於運算子,用於比較兩個運算子的值。如果第一個運算元的值小於第二個運算元的值,則運算子返回真,否則返回假。

  • <= 運算子 是一個小於或等於運算子,用於比較兩個運算子的值。如果第一個運算元的值小於或等於第二個運算元的值,則運算子返回真,否則返回假。

  • > 運算子 是一個大於運算子,用於比較兩個運算子的值。如果第一個運算元的值大於第二個運算元的值,則運算子返回真,否則返回假。

  • >= 運算子 是一個大於或等於運算子,用於比較兩個運算子的值。如果第一個運算元的值大於或等於第二個運算元的值,則運算子返回真,否則返回假。

示例

a = 32
b = 67
if(( $a==$b ))
then
   echo a is equal to b.
else
   echo a is not equal to b.
fi
if(( $a!=$b ))
then
   echo a is not equal to b.
else
   echo a is equal to b.
fi
if(( $a<$b ))
then
   echo a is less than b.
else
   echo a is not less than b.
fi

if(( $a<=$b ))
then
   echo a is less than or equal to b.
else
   echo a is not less than or equal to b.
fi
if(( $a>$b ))
then
   echo a is greater than b.
else
   echo a is not greater than b.
fi
if(( $a>=$b ))
then
   echo a is greater than or equal to b.
else
   echo a is not greater than or equal to b.
fi

輸出

a is not equal to b.
a is not equal to b.
a is less than b.
a is less than or equal to b.
a is not greater than b.
a is not greater than or equal to b.

布林運算子

布林運算子也稱為邏輯運算子,用於在 Shell 指令碼中執行邏輯運算。Shell 指令碼中有 3 種有效的邏輯運算子:

  • 邏輯與 (&&) 計算布林值的邏輯與。如果兩個運算元都為真,則返回真,否則返回假。

  • 邏輯或 (||) 計算布林運算元的邏輯或運算。如果兩個運算元都為假,則返回假,否則返回真。

  • 邏輯非 (! ) 計算傳遞的單個運算元的否定。如果運算元的值為真,則返回假,否則返回真。

示例

a = true
b = false
if(($a == "true" & $b == "true" ))
then
   echo Both are true.
else
   echo Both are not true.
fi
if(($a == "true" || $b == "true" ))
then
   echo Atleast one of them is true.
else
   echo None of them is true.
fi
if(( ! $a == "true" ))
then
   echo "a" was intially false.
else
   echo "a" was intially true.
fi

輸出

Both are not true.
Atleast one of them is true
a was intially true.

位運算子是在位變數上執行位運算的運算子。Shell 指令碼中有 6 種位運算子:

  • 按位與 (&) 是一個運算子,它對運算元的位執行二進位制與運算,即第一個變數的每個位都與第二個運算子的相應位進行運算。

  • 按位或 (|) 是一個運算子,它對運算元的位執行二進位制或運算,即第一個變數的每個位都與第二個運算子的相應位進行運算。

  • 按位異或 (^) 是一個運算子,它對運算元的位執行二進位制異或運算,即第一個變數的每個位都與第二個運算子的相應位進行運算。

  • 按位取反 (~) 是一個運算子,它對運算元的位執行二進位制非運算,即第一個變數的每個位都與第二個運算子的相應位進行運算。

  • 左移 (<<) 是一個運算子,它將運算元的位向左移動運算子右側指定的 n 次。

  • 右移 (>>) 是一個運算子,它將運算元的位向右移動運算子右側指定的 n 次。

示例

a = 14
b = 67
bitwiseAND=$(( a&b ))

echo Bitwise AND of a and b is $bitwiseAND
bitwiseOR=$(( a|b ))

echo Bitwise OR of a and b is $bitwiseOR
bitwiseXOR=$(( a^b ))

echo Bitwise XOR of a and b is $bitwiseXOR
bitiwiseComplement=$(( ~a ))

echo Bitwise Compliment of a is $bitiwiseComplement
leftshift=$(( a<<1 ))

echo Left Shift of a is $leftshift
rightshift=$(( b>>1 ))

echo Right Shift of b is $rightshift

輸出

Bitwise AND of a and b is 2
Bitwise OR of a and b is 79
Bitwise XOR of a and b is 77
Bitwise Compliment of a is -15
Left Shift of a is 28
Right Shift of b is 33

檔案測試運算子

檔案測試運算子用於測試檔案的特定屬性。一些檔案測試運算子包括:

  • -b 運算子 用於檢查指定的檔案是否為塊特殊檔案。如果檔案是塊特殊檔案,則函式返回真,否則返回假。

  • -s 運算子 是一個運算子,用於檢查給定檔案的大小。如果檔案大小大於 0,則返回真,否則返回假。

  • -r 運算子 是一個運算子,用於檢查是否授予讀取檔案內容的許可權。如果授予讀取許可權,則返回真,否則返回假。

  • -w 運算子 是一個運算子,用於檢查是否授予寫入檔案的許可權。如果授予寫入許可權,則返回真,否則返回假。

  • -x 運算子 是一個運算子,用於檢查是否授予執行檔案的許可權。如果授予執行許可權,則返回真,否則返回假。

更新於: 2019-11-22

17K+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.