shell支援多種運算子,包括:
算數運算子
關係運算子
布林運算子
字串運算子
檔案測試運算子
原生bash不支援簡單的數**算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。
expr 是一款表示式計算工具,使用它能完成表示式的求值操作。
例如,兩個數相加(注意使用的是反引號 ` 而不是單引號 '):
# vi test.sh
#!/bin/bash
sum=`expr 1 + 3`
echo "兩數之和:$sum"
輸出:# sh test.sh
兩數之和:4
注意:表示式和運算子之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2,這與我們熟悉的大多數程式語言不一樣。
完整的表示式要被 ` ` 包含,注意這個字元不是常用的單引號,在 esc 鍵下邊。
算術運算子
下表列出了常用的算術運算子,假定變數 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
==相等。用於比較兩個數字,相同則返回 true
[ $a == $b ] 返回 false
!=相等。用於比較兩個數字,不相同則返回 true
[ $a != $b ] 返回 true
注意:條件表示式要放在方括號之間,並且要有空格,例如: [$a==$b] 是錯誤的,必須寫成 [ $a == $b ]。
乘號(*)前邊必須加反斜槓(\)才能實現乘法運算。
關係運算子
關係運算子只支援數字,不支援字串,除非字串的值是數字。
下表列出了常用的關係運算子,假定變數 a 為 10,變數 b 為 20:
運算子說明
舉例-eq
檢測兩個數是否相等,相等返回 true
[ $a -eq $b ] 返回 false
-ne檢測兩個數是否不相等,不相等返回 true
[ $a -ne $b ] 返回 true
-gt檢測左邊的數是否大於右邊的,如果是,則返回 true
[ $a -gt $b ] 返回 false
-lt檢測左邊的數是否小於右邊的,如果是,則返回 true
[ $a -lt $b ] 返回 true
-ge檢測左邊的數是否大於等於右邊的,如果是,則返回 true
[ $a -ge $b ] 返回 false
-le檢測左邊的數是否小於等於右邊的,如果是,則返回 true
[ $a -le $b ] 返回 true
布林運算子
下表列出了常用的布林運算子,假定變數 a 為 10,變數 b 為 20:
運算子說明舉例
! 非運算,表示式為 true 則返回 false,否則返回 true。[ ! false ] 返回 true
-o 或運算,有乙個表示式為 true 則返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true
-a與運算,兩個表示式都為 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false
邏輯運算子
以下介紹 shell 的邏輯運算子,假定變數 a 為 10,變數 b 為 20:
運算子說明舉例
&& 邏輯的 and[[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 邏輯的 or[[ $a -lt 100 || $b -gt 100 ]] 返回 true
字串運算子
下表列出了常用的字串運算子,假定變數 a 為 "abc",變數 b 為 "efg":
運算子說明舉例
= 檢測兩個字串是否相等,相等返回 true。[ $a = $b ] 返回 false
!=檢測兩個字串是否相等,不相等返回 true。[ $a != $b ] 返回 true
-z檢測字串長度是否為0,為0返回 true。[ -z $a ] 返回 false
-n 檢測字串長度是否為0,不為0返回 true。[ -n $a ] 返回 true
str檢測字串是否為空,不為空返回 true。[ $a ] 返回 true
檔案測試運算子
檔案測試運算子用於檢測 unix 檔案的各種屬性。
屬性檢測描述如下:
操作符說明
舉例-b file
檢測檔案是否是塊裝置檔案,如果是,則返回 true
[ -b $file ] 返回 false
-c file
檢測檔案是否是字元裝置檔案,如果是,則返回 true
[ -c $file ] 返回 false
-d file
檢測檔案是否是目錄,如果是,則返回 true
[ -d $file ] 返回 false
-f file
檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回 true
[ -f $file ] 返回 true
-g file
檢測檔案是否設定了 sgid 位,如果是,則返回 true
[ -g $file ] 返回 false
-k file
檢測檔案是否設定了粘著位(sticky bit),如果是,則返回 true
[ -k $file ] 返回 false
-p file
檢測檔案是否是有名管道,如果是,則返回 true
[ -p $file ] 返回 false
-u file
檢測檔案是否設定了 suid 位,如果是,則返回 true
[ -u $file ] 返回 false
-r file
檢測檔案是否可讀,如果是,則返回 true
[ -r $file ] 返回 true
-w file
檢測檔案是否可寫,如果是,則返回 true
[ -w $file ] 返回 true
-x file
檢測檔案是否可執行,如果是,則返回 true
[ -x $file ] 返回 true
-s file
檢測檔案是否為空(檔案大小是否大於0),不為空返回 true
[ -s $file ] 返回 true
-e file
檢測檔案(包括目錄)是否存在,如果是,則返回 true
[ -e $file ] 返回 true
shell指令碼從入門到複雜 其四 陣列
陣列中可以存放多個值。bash shell 只支援一維陣列 不支援多維陣列 陣列元素的下標從0開始。shell 陣列用括號來表示,元素用 空格 符號分割開,語法格式如下 array name value1 valuen 讀取陣列 vi test.sh bin bash array1 a b c d ...
shell指令碼之從入門到放棄
批處理 預定義變數 用途 當前程序的程序號 pid 最後一次執行的命令的返回狀態。如果這個變數的值為 0,則證明上一條命令正確執行 如果這 個變數的值為非 0 具體是哪個數由命令自己來決定 則證明上一條命令執行錯誤 1後台執行的最後乙個程序的程序號 pid 備註 for,while,until三個大...
shell指令碼從入門到複雜 其一 第乙個指令碼
第乙個shell指令碼 vi test.sh 新增下面內容 bin bash echo hello world 是乙個約定的標記,告訴系統指令碼需要什麼直譯器來執行,就是使用哪一種 shell。echo 命令用於向視窗輸出文字。執行指令碼有兩種方式 1 作為可執行指令碼 這種方式需要賦予指令碼可執行...