Unix/Linux - Shell 基本運算子



每個shell都支援各種運算子。本章將詳細討論Bourne shell(預設shell)。

我們現在將討論以下運算子:

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

Bourne shell最初沒有執行簡單算術運算的機制,但它使用外部程式,例如awkexpr

以下示例顯示如何新增兩個數字:

#!/bin/sh

val=`expr 2 + 2`
echo "Total value : $val"

以上指令碼將生成以下結果:

Total value : 4

新增時需要注意以下幾點:

  • 運算子和表示式之間必須有空格。例如,2+2是不正確的;應寫成2 + 2。

  • 完整的表示式應放在‘ ` ’之間,稱為反引號。

算術運算子

Bourne Shell支援以下算術運算子。

假設變數a值為10,變數b值為20,則:

顯示示例

運算子 描述 示例
+ (加法) 將運算子兩側的值相加 `expr $a + $b` 將得到 30
- (減法) 從左運算元中減去右運算元 `expr $a - $b` 將得到 -10
* (乘法) 將運算子兩側的值相乘 `expr $a \* $b` 將得到 200
/ (除法) 將左運算元除以右運算元`expr $b / $a` 將得到 2
% (取模) 將左運算元除以右運算元並返回餘數 `expr $b % $a` 將得到 0
= (賦值) 將右運算元賦值給左運算元 a = $b 將把 b 的值賦給 a
== (等於) 比較兩個數字,如果兩者相同則返回真。 [ $a == $b ] 將返回假。
!= (不等於) 比較兩個數字,如果兩者不同則返回真。 [ $a != $b ] 將返回真。

非常重要的是要理解所有條件表示式都應該放在方括號內,並且方括號周圍要有空格,例如[ $a == $b ]是正確的,而[$a==$b]是不正確的。

所有算術計算都是使用長整數進行的。

關係運算符

Bourne Shell支援以下特定於數值的關係運算符。除非這些值是數字,否則這些運算子不適用於字串值。

例如,以下運算子將用於檢查10和20之間的關係,以及"10"和"20"之間的關係,但不適用於"ten"和"twenty"之間的關係。

假設變數a值為10,變數b值為20,則:

顯示示例

運算子 描述 示例
-eq 檢查兩個運算元的值是否相等;如果是,則條件為真。 [ $a -eq $b ] 為假。
-ne 檢查兩個運算元的值是否相等;如果不相等,則條件為真。 [ $a -ne $b ] 為真。
-gt 檢查左運算元的值是否大於右運算元的值;如果是,則條件為真。 [ $a -gt $b ] 為假。
-lt 檢查左運算元的值是否小於右運算元的值;如果是,則條件為真。 [ $a -lt $b ] 為真。
-ge 檢查左運算元的值是否大於或等於右運算元的值;如果是,則條件為真。 [ $a -ge $b ] 為假。
-le 檢查左運算元的值是否小於或等於右運算元的值;如果是,則條件為真。 [ $a -le $b ] 為真。

非常重要的是要理解所有條件表示式都應該放在方括號內,並且方括號周圍要有空格。例如,[ $a <= $b ]是正確的,而[$a <= $b]是不正確的。

布林運算子

Bourne Shell支援以下布林運算子。

假設變數a值為10,變數b值為20,則:

顯示示例

運算子 描述 示例
! 這是邏輯非。它將真條件轉換為假,反之亦然。 [ ! false ] 為真。
-o 這是邏輯。如果其中一個運算元為真,則條件為真。 [ $a -lt 20 -o $b -gt 100 ] 為真。
-a 這是邏輯。如果兩個運算元都為真,則條件為真,否則為假。 [ $a -lt 20 -a $b -gt 100 ] 為假。

字串運算子

Bourne Shell支援以下字串運算子。

假設變數a值為"abc",變數b值為"efg",則:

顯示示例

運算子 描述 示例
= 檢查兩個運算元的值是否相等;如果是,則條件為真。 [ $a = $b ] 為假。
!= 檢查兩個運算元的值是否相等;如果不相等,則條件為真。 [ $a != $b ] 為真。
-z 檢查給定字串運算元的大小是否為零;如果長度為零,則返回真。 [ -z $a ] 為假。
-n 檢查給定字串運算元的大小是否為非零;如果長度不為零,則返回真。 [ -n $a ] 為真。
str 檢查str是否不是空字串;如果是空字串,則返回假。 [ $a ] 為真。

檔案測試運算子

我們有一些運算子可用於測試與Unix檔案相關的各種屬性。

假設變數file包含一個現有檔名"test",其大小為100位元組,並且具有-讀、寫和執行許可權:

顯示示例

運算子 描述 示例
-b file 檢查檔案是否是塊特殊檔案;如果是,則條件為真。 [ -b $file ] 為假。
-c file 檢查檔案是否是字元特殊檔案;如果是,則條件為真。 [ -c $file ] 為假。
-d file 檢查檔案是否是目錄;如果是,則條件為真。 [ -d $file ] 為假。
-f file 檢查檔案是否是普通檔案(與目錄或特殊檔案相對);如果是,則條件為真。 [ -f $file ] 為真。
-g file 檢查檔案是否設定了其設定組ID (SGID) 位;如果是,則條件為真。 [ -g $file ] 為假。
-k file 檢查檔案是否設定了其粘滯位;如果是,則條件為真。 [ -k $file ] 為假。
-p file 檢查檔案是否命名管道;如果是,則條件為真。 [ -p $file ] 為假。
-t file 檢查檔案描述符是否開啟並與終端關聯;如果是,則條件為真。 [ -t $file ] 為假。
-u file 檢查檔案是否設定了其設定使用者ID (SUID) 位;如果是,則條件為真。 [ -u $file ] 為假。
-r file 檢查檔案是否可讀;如果是,則條件為真。 [ -r $file ] 為真。
-w file 檢查檔案是否可寫;如果是,則條件為真。 [ -w $file ] 為真。
-x file 檢查檔案是否可執行;如果是,則條件為真。 [ -x $file ] 為真。
-s file 檢查檔案大小是否大於0;如果是,則條件為真。 [ -s $file ] 為真。
-e file 檢查檔案是否存在;即使檔案是目錄但存在,也為真。 [ -e $file ] 為真。

C Shell 運算子

以下連結將簡要介紹 C Shell 運算子:

C Shell 運算子

Korn Shell 運算子

以下連結將幫助您瞭解 Korn Shell 運算子:

Korn Shell 運算子

廣告