
- Unix/Linux 初學者教程
- Unix/Linux - 首頁
- Unix/Linux - 什麼是Linux?
- Unix/Linux - 快速入門
- Unix/Linux - 檔案管理
- Unix/Linux - 目錄
- Unix/Linux - 檔案許可權
- Unix/Linux - 環境變數
- Unix/Linux - 基本實用程式
- Unix/Linux - 管道 & 過濾器
- Unix/Linux - 程序
- Unix/Linux - 通訊
- Unix/Linux - vi 編輯器
- Unix/Linux Shell 程式設計
- Unix/Linux - Shell 指令碼
- Unix/Linux - 什麼是Shell?
- Unix/Linux - 使用變數
- Unix/Linux - 特殊變數
- Unix/Linux - 使用陣列
- Unix/Linux - 基本運算子
- Unix/Linux - 決策語句
- Unix/Linux - Shell 迴圈
- Unix/Linux - 迴圈控制
- Unix/Linux - Shell 替換
- Unix/Linux - 引號機制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函式
- Unix/Linux - 手冊頁幫助
- 高階 Unix/Linux
- Unix/Linux - 標準 I/O 流
- Unix/Linux - 檔案連結
- Unix/Linux - 正則表示式
- Unix/Linux - 檔案系統基礎
- Unix/Linux - 使用者管理
- Unix/Linux - 系統性能
- Unix/Linux - 系統日誌
- Unix/Linux - 訊號和陷阱
Unix/Linux - Shell 基本運算子
每個shell都支援各種運算子。本章將詳細討論Bourne shell(預設shell)。
我們現在將討論以下運算子:
- 算術運算子
- 關係運算符
- 布林運算子
- 字串運算子
- 檔案測試運算子
Bourne shell最初沒有執行簡單算術運算的機制,但它使用外部程式,例如awk或expr。
以下示例顯示如何新增兩個數字:
#!/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 運算子:
Korn Shell 運算子
以下連結將幫助您瞭解 Korn Shell 運算子: