#!/bin/bash val=`expr 2 + 2` echo "兩數之和爲 : $val" #兩數之和爲 : 4
下表列出了經常使用的算術運算符,假定變量 a 爲 10,變量 b 爲 20:shell
運算符 | 說明 | 舉例 |
---|---|---|
+ | 加法 | `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。編程
注意:centos
- 乘號(*)前邊必須加反斜槓()才能實現乘法運算;
- if...then...fi 是條件語句,後續將會講解。
- 在 MAC 中 shell 的 expr 語法是:$((表達式)),此處表達式中的 "*" 不須要轉義符號 "" 。
運算符 | 說明 | 舉例 |
---|---|---|
-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。 |
#!/bin/bash a=10 b=20 if [ $a -eq $b ] then echo "$a -eq $b : a 等於 b" else echo "$a -eq $b: a 不等於 b" fi if [ $a -ne $b ] then echo "$a -ne $b: a 不等於 b" else echo "$a -ne $b : a 等於 b" fi if [ $a -gt $b ] then echo "$a -gt $b: a 大於 b" else echo "$a -gt $b: a 不大於 b" fi if [ $a -lt $b ] then echo "$a -lt $b: a 小於 b" else echo "$a -lt $b: a 不小於 b" fi if [ $a -ge $b ] then echo "$a -ge $b: a 大於或等於 b" else echo "$a -ge $b: a 小於 b" fi if [ $a -le $b ] then echo "$a -le $b: a 小於或等於 b" else echo "$a -le $b: a 大於 b" fi #10 -eq 20: a 不等於 b #10 -ne 20: a 不等於 b #10 -gt 20: a 不大於 b #10 -lt 20: a 小於 b #10 -ge 20: a 小於 b #10 -le 20: a 小於或等於 b
運算符 | 說明 | 舉例 |
---|---|---|
! | 非運算,表達式爲 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。 |
#!/bin/bash a=10 b=20 if [ $a != $b ] then echo "$a != $b : a 不等於 b" else echo "$a == $b: a 等於 b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a 小於 100 且 $b 大於 15 : 返回 true" else echo "$a 小於 100 且 $b 大於 15 : 返回 false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a 小於 100 或 $b 大於 100 : 返回 true" else echo "$a 小於 100 或 $b 大於 100 : 返回 false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a 小於 5 或 $b 大於 100 : 返回 true" else echo "$a 小於 5 或 $b 大於 100 : 返回 false" fi #10 != 20 : a 不等於 b #10 小於 100 且 20 大於 15 : 返回 true #10 小於 100 或 20 大於 100 : 返回 true #10 小於 5 或 20 大於 100 : 返回 false
運算符 | 說明 | 舉例 |
---|---|---|
&& | 邏輯的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 邏輯的 OR | [[ $a -lt 100 |
#!/bin/bash a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi # 返回 false # 返回 true
運算符 | 說明 | 舉例 |
---|---|---|
= | 檢測兩個字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 檢測兩個字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 檢測字符串長度是否爲0,爲0返回 true。 | [ -z $a ] 返回 false。 -n|檢測字符串長度是否爲0,不爲0返回 true。|[ -n "$a" ] 返回 true。 |
$ | 檢測字符串是否爲空,不爲空返回 true。 | [ $a ] 返回 true。 |
#!/bin/bash a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a 等於 b" else echo "$a = $b: a 不等於 b" fi if [ $a != $b ] then echo "$a != $b : a 不等於 b" else echo "$a != $b: a 等於 b" fi if [ -z $a ] then echo "-z $a : 字符串長度爲 0" else echo "-z $a : 字符串長度不爲 0" fi if [ -n "$a" ] then echo "-n $a : 字符串長度不爲 0" else echo "-n $a : 字符串長度爲 0" fi if [ $a ] then echo "$a : 字符串不爲空" else echo "$a : 字符串爲空" fi # abc = efg: a 不等於 b # abc != efg : a 不等於 b # -z abc : 字符串長度不爲 0 # -n abc : 字符串長度不爲 0 # abc : 字符串不爲空
操做符 | 說明 | 舉例 |
---|---|---|
-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。 |
其餘檢查符:bash
-S: 判斷某文件是否 socket。
-L: 檢測文件是否存在而且是一個符號連接。
實例socket
#!/bin/bash file="/var/www/runoob/test.sh" if [ -r $file ] then echo "文件可讀" else echo "文件不可讀" fi if [ -w $file ] then echo "文件可寫" else echo "文件不可寫" fi if [ -x $file ] then echo "文件可執行" else echo "文件不可執行" fi if [ -f $file ] then echo "文件爲普通文件" else echo "文件爲特殊文件" fi if [ -d $file ] then echo "文件是個目錄" else echo "文件不是個目錄" fi if [ -s $file ] then echo "文件不爲空" else echo "文件爲空" fi if [ -e $file ] then echo "文件存在" else echo "文件不存在" fi #文件可讀 #文件可寫 #文件可執行 #文件爲普通文件 #文件不是個目錄 #文件不爲空 #文件存在