<運算子>shell學習之路(六)
阿新 • • 發佈:2018-11-09
shell運算子包括
- 算數運算子
- 關係運算符
- 布林運算子
- 字串運算子
- 檔案測試運算子
原生bash不支援簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用
變數和符號之間必須要有空格,否則就會按照原樣輸出
算數運算子
#!/bin/bash
sum=`expr 2 + 2`
mod=`expr 4 / 2`
error=`expr 4-2`
echo "${sum}"
echo "${mod}"
echo "${error}"
結果
4
2
4-2
關係運算符
運算子 | 說明 | 舉例 |
---|---|---|
-eq | 檢測兩個數是否相等,相等返回 true。 | [ 1 -eq 2 ] 返回 false。 |
-ne | 檢測兩個數是否相等,不相等返回 true。 | [ 2 -ne 2 ] 返回 true。 |
-gt | 檢測左邊的數是否大於右邊的,如果是,則返回 true。 | [ 4 -gt 2 ] 返回 false。 |
-lt | 檢測左邊的數是否小於右邊的,如果是,則返回 true。 | [ 3 -lt 5 ] 返回 true。 |
-ge | 檢測左邊的數是否大於等於右邊的,如果是,則返回 true。 | [ 7 -ge 9 ] 返回 false。 |
-le | 檢測左邊的數是否小於等於右邊的,如果是,則返回 true。 | [ 4 -le 5 ] 返回 true。 |
示例:
a=10
b=20
if [ ${a} -gt ${b} ]
then
echo "a > b"
else
echo "a < b"
fi
#注:每一個符號之間都需要空格,不然會報錯,但是不影響執行
布林運算子
運算子 | 說明 | 舉例 |
---|---|---|
! | 非運算,表示式為 true 則返回 false,否則返回 true。 | [ ! false ] 返回 true。 |
-o | 或運算,有一個表示式為 true 則返回 true。 | [ 10 -lt 20 -o 30 -gt 100 ] 返回 true。 |
-a | 與運算,兩個表示式都為 true 才返回 true。 | [ 10 -lt 20 -a 77 -gt 100 ] 返回 false。 |
a=20
b=20
if [ ${a} != ${b} ]
then
echo "a != b"
else
echo "a = b"
fi
邏輯運算子
運算子 | 說明 | 舉例 |
---|---|---|
&& | 邏輯的 AND | [[ 10 -lt 100 && 300 -gt 100 ]] 返回 false |
|| | 邏輯的 OR | [[ 55 -lt 100 || 666 -gt 100 ]] 返回 true |
字串運算子
運算子 | 說明 | 舉例 |
---|---|---|
= | 檢測兩個字串是否相等,相等返回 true。 | [
|
!= | 檢測兩個字串是否相等,不相等返回 true。 | [
|
-z | 檢測字串長度是否為0,為0返回 true。 | [ -z $a ] 返回 false。 |
-n | 檢測字串長度是否為0,不為0返回 true。 | [ -n $a ] 返回 true。 |
str | 檢測字串是否為空,不為空返回 true。 | [ $a ] 返回 true。 |
檔案測試運算子
操作符 | 說明 | 舉例 |
---|---|---|
-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。 |