表達式與運算符
bash支持很多運算符,包括算數運算符、關系運算符、布爾運算符、字符串運算符和文件測試運算符。
1、表達式
bash的表達式可以分為算術表達式和邏輯表達式兩種類型。
1、算術表達式
數學運算涉及到表達式求值。bash自身並不支持簡單的數學運算,但是可以awk和expr等命令來實現數學運算,其中expr最為常用,使用它能夠完成表達式的求值操作。示例,將兩個數相加,同時將運算結果表達出來
expr 5 + 3
註意:操作數和運算符之間一定要有空格,否則expr會簡單的將其當作字符串輸出。
當然,可以將計算的值用作變量,也可以將expr計算的結果賦值給變量。
n=1 m=5 expr $n + $m val=`expr 2 + 2` echo $val
註意,完整的表達式要用反引號"`"括起來。
更為簡單的方式是使用$[]表達式進行數學計算,例如
val=$[5+3] echo $val
這種形式不要求運算符和操作數之間有空格。
還可以用let命令來計算整數表達式的值,如
n=1 m=5 let val=$n+$m echo $val
2、邏輯表達式
邏輯表達式主要用於條件判斷,值為true(或為0)表示結果為真,值為false表示結果為假。
通常使用test命令來判斷表達式的真假。語法格式如下:
test 邏輯表達式
例如以下語句用於比較兩個字符串是否相等。
test "abc"="xyz"
test命令更常用方括號"[]"代替。語法格式如下
[ 邏輯表達式 ]
在使用左方括號而非test時,其後必須始終跟著一個空格、要評估的邏輯表達式、一個空格和右方括號,右方括號表示所需評估表達式的結束。邏輯表達式兩邊的空格是必需的,這表示調用test,以區別於同樣經常使用方括號的字符、模式匹配操作。
邏輯表達式判斷表達式的結果,然後返回真假,通常和if、while或until命令結合使用,用於條件判斷,以便對程序流進行廣泛的控制。
2、算術運算符
算術運算符用於數值計算,主要的算術運算符列表如下:
+:加法 -:減法 *:乘法 /:除法 %;取余值 =:賦值
這裏給出一個使用算術運算符的例子
#!/bin/bash a=1 b=2 val=`expr $a + $b` echo "a + b : $val" #乘法(*)前面必須加轉義符號反斜杠(\)才能實現乘法操作 val=`expr $a \* $b` echo "a*b:$val"
3、整數關系運算符
Shell支持整數比較,還需要使用整數關系運算符,列表如下:
-eq:相等,檢測兩個數是否相等,相等返回true -ne:不等於。檢測兩個數是否相等,不相等返回true -gt:大於。檢測左邊的數是否大於右邊的,如果是,返回true -lt:小於。檢測左邊的數是否小於右邊的,如果是,返回true -ge:大於等於 -le:小於等於
下面是一個關系運算符的例子
#!/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
4、字符串檢測運算符
字符串運算符用於檢測字符串,列表如下:
=:檢測兩個字符串是否相等,相等返回true。 !=:檢測兩個字符串是否相等,不相等返回true。 -z:檢測字符串長度是否為0,為0返回true。 -n:檢測字符串長度是否為0,不為0返回true。 str:檢測字符串是否為空,不為空返回true。
下面給出一個例子
#!/bin/bash a="abc" b="xyz" 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 [ $a ] then echo "$a :字符串為非空" else echo "$a :字符串為空" fi
5、文件測試運算符
文件測試運算符用於檢測文件的各種屬性,以文件名為參數
-b:檢測文件是不是塊設備文件,如果是,則返回true。 -c:檢測文件是不是字符設備文件,如果是,則返回true。 -d :檢測文件是不是目錄,如果是,則返回true。 -f:檢測文件是不是普通文件,如果是,則返回true。 -g:檢測文件是否設置了SGID位,如果是,則返回ture。 -k:檢測文件是否設置了粘著位,如果是,則返回true。 -p:檢測文件是不是具名管道,如果是,則返回,true。 -u:檢測文件是是否設置了SUID位,如果是,則返回ture。 -r:檢測文件是否刻度,如果是,則返回true。 -w:檢測文件是否可寫,如果是,則返回true。 -x :檢測文件是否可執行,如果是,則返回true。 -s:檢測文件是否為空,不為空則返回true。 -e:檢測文件是否存在,如果是,則返回true。
例如,下面的代碼將檢測/bin/bash的讀寫屬性
#!/bin/bash file="/bin/bash" if [ -r $file ] then echo "文件具備讀取權限" else echo "文件不具備讀取權限" fi if [ -w $file ] then echo "文件具備寫入權限" else echo "文件不具備寫入權限" fi
6、布爾運算符
布爾運算符用於對一個或多個邏輯表達式執行邏輯運算,結果為true或為false。通常用來對多個條件進行判斷。有與、或、非3個運算符。
-a:與運算。兩個條件都為true才返回true。
-o:或運算。有一個表達式為true就返回true。
!:非運算。表達式為true,則返回false,否則返回true。
這裏給出一個示例:
#!/bin/bash a=5 b=10 if [ $a -lt 10 -a $b -gt 15 ] then echo "兩個條件都滿足" else echo "兩個條件都不滿足" fi
表達式與運算符