1. 程式人生 > ><運算子>shell學習之路(六)

<運算子>shell學習之路(六)

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。 [ 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。


檔案測試運算子

操作符 說明 舉例
-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。