Shell中條件判斷語法與判斷條件
一,簡介
Shell各種判斷結構和運算符的用法是shell編程的基礎,了解shell的判斷、運算符和一些退出狀態
對後面的學習有很重要的影響。shell有一個內部命令test經常用於對判斷語句
進行測試一種或幾種狀態的條件是否成立
二. 判斷條件
(1)Linux的shell中的測試命令,用於測試某種條件或某幾種條件是否真實存在
測試命令是判斷語句和循環語句中條件測試的工具,對判斷和運算符的比較測試有很大的幫助。
(2)測試條件為真,返回一個0值; 為假,返回一個非0整數值
測試命令有兩種方式,一種test expression(表達式);另一種命令格式[ expression ]
其中”[“是啟動測試命令,”]”要與之配對,而且”[“和”]”前後的空格必不可少
此方式常作為流程控制語句的判斷條件
2.1 字符串判斷
str1 = str2 當兩個串有相同內容、長度時為真
str1 != str2 當串str1和str2不等時為真
-n str1 當串的長度大於0時為真(串非空)
-z str1 當串的長度為0時為真(空串)
這個地方有必要舉個小例子,我們編程的時候經常做一些使用喜歡使用空格表示空
但shell中空格會被判斷成一個字符,比如:
[ -n ” ” ] 這個值echo $?會返回0,說明字符串不為空。
[ -z ” ” ] 這個值echo $?會返回非空,說明裏邊不是空。
2.2 數字的判斷
int1 -eq int2 兩數相等為真
int1 -ne int2 兩數不等為真
int1 -gt int2 int1大於int2為真
int1 -ge int2 int1大於等於int2為真
int1 -lt int2 int1小於int2為真
int1 -le int2 int1小於等於int2為真
2.3 文件的判斷
-e file 若文件存在,則為真
-d file 若文件存在且是一個目錄,則為真
-b file 若文件存在且是一個塊特殊文件,則為真
-c file 若文件存在且是一個字符特殊文件,則為真
-f file 若文件存在且是一個規則文件,則為真
-g file 若文件存在且設置了SGID位的值,則為真
-h file 若文件存在且為一個符合鏈接,則為真
-k file 若文件存在且設置了“sticky”位的值
-p file 若文件存在且為一已命名管道,則為真
-r file 若文件存在且可讀,則為真
-s file 若文件存在且其大小大於零,則為真
-u file 若文件存在且設置了SUID位,則為真
-w file 若文件存在且可寫,則為真
-x file 若文件存在且可執行,則為真
-o file 若文件存在且被有效用戶ID所擁有,則為真
2.4 邏輯判斷
!expr 若expr為假則復合表達式為真,expr可以是任何有效的測試表達式
expr1 -a expr2 若expr1和expr2都為真則整式為真
expr1 -o expr2 若expr1和expr2有一個為真則整式為真
補充: 系統變量
$n 該變量與腳本被激活時所帶的參數相對應
.n是正整數,與參數位置相對應($1,$2…)
$? 前一個命令執行後的退出狀態
$# 提供腳本的參數號
$* 所有這些參數都被雙引號引住。若一個腳本接收兩個參數,$*等於$1$2
$0 正在被執行命令的名字。對於shell腳本而言,這是被激活命令的路徑
$@ 所有這些參數都分別被雙引號引住。若一個腳本接收到兩個參數,[email protected]$1$2
$$ 當前shell的進程號。對於shell腳本,這是其正在執行時的進程ID
$! 前一個後臺命令的進程號
3、退出狀態
(1)Linux系統,每當命令執行完成後,系統返回一個退出狀態。若退出狀態值為0,表示命令運行成功;反之若退出狀態值不為0,則表示命令運行失敗。最後一次執行命令的退出狀態值被保存在內置變量”$?”中。
(2)exit命令格式:exit status(status在0~255之間),返回該狀態值時伴隨腳本的退出,參數被保存在shell變量$?中。
三、總結
(1)shell的各種運算符是編程的重要環節。IF和CASE條件判斷結構的應用,使問題有了多分支的選擇。
(2)本文僅簡單的介紹重要的基礎知識,若要熟練使用,還需要大量的練習。
Shell中條件判斷語法與判斷條件