Linux條件測試
大家好,我是“孤雲幕雨”;今天給大家帶來的是《Linux條件測試》
條件測試定義: 判斷某需求是否滿足,需要由“條件測試”機制來實現
如何編寫測試表達式以實現所需的測試
(1). 執行命令,並利用命令狀態返回值來判斷
0:成功
1-255:失敗
(2). 測試表達式
test 測試表達式
[ 測試表達式 ]
[[ 測試表達式 ]]
注意:中括號和測試表達式前後必須有空格,否則為語法錯誤
bash測試型別
一、數值比較測試
INTEGER 1 –gt INTEGER 2:判斷整數1是否大於整數2;大於為真,否則為假
INTEGER 1 –ge
INTEGER 1 –lt INTEGER 2:判斷整數1是否小於整數2;小於為真,否則為假
INTEGER 1 –le INTEGER 2:判斷整數1是否小於等於整數2
INTEGER 1 –eq INTEGER 2:判斷整數1是否等於整數2;等於為真,不等為假
INTEGER 1 –ne INTEGER 2:判斷整數1是否不等於整數2;不等為真,等於為假
二、字串測試
-z "STRING":判斷指定字串是否為空;空則為真,不空則為假
-n "STRING":判斷指定字串是否不空;不空則為真,空則為假
STRING 1 == STRING 2:判斷字串1是否和字串2相等;相等為真,否則為假
STRING 1 !== STRING 2:判斷字串1是否和字串2不相等;不等為真,否則為假
STRING =~ PATTERN:左側的字串是否能被右側的模式所匹配(包含匹配)能匹配到則為真
STRING 1 > STRING 2:字串是否大於
STRING 1 < STRING 2:字串是否小於
注意:用於字串比較時的用到的運算元都應該使用引號,且要在雙中括號[[ ]]中進行
三、檔案測試
(一)檔案存在性測試
單目測試
-e FILENAME:檔案存在性測試,存在為真,否則為假
(二)檔案型別測試
-f FILENAME:判斷該檔案是否存在並且為普通檔案
-d FILENAME:判斷該檔案是否存在並且為目錄檔案
-L FILENAME 或 -h FILENAME:判斷該檔案是否存在並且為軟連結檔案
-b FILENAME:判斷該檔案是否存在並且為塊裝置檔案
-c FILENAME:判斷該檔案是否存在並且為字元裝置檔案
-p FILENAME:判斷該檔案是否存在並且為命名管道檔案
-S FILENAME:判斷該檔案是否存在並且為套接字檔案
(三)檔案內容測試
-s FILENAME:判斷該檔案是否存在,是否為非空檔案
(四)檔案開啟測試
-t FD;fd表示檔案描述符是否已經開啟且與某終端相關
(五)檔案時間戳測試
-N FILENAME:檔案自從上一次被讀取之後是否被修改過
(六)檔案從屬關係測試
-O FILENAME:當前有效使用者是否為檔案屬主
-G FILENAME:當前有效使用者是否為檔案屬組
(七)雙目測試
FILE1 -nt FILE2:判斷FILE1是否新於FILE2
FILE1 -ot FILE2:判斷FILE1是否舊於FILE2
FILE1 -ef FILE2:判斷FILE1和FILE2是否指向同一個檔案系統的相同inode的硬連結
(八)檔案許可權測試
普通許可權測試
-r FILENAME:判斷該檔案是否存在,並且對當前使用者可讀
-w FILENAME:判斷該檔案是否存在,並且對當前使用者可寫
-x FILENAME:判斷該檔案是否存在,並且對當前使用者可執行
特殊許可權測試
-u FILENAME:判斷該檔案是否存在,並且擁有SUID許可權
-g FILENAME:判斷該檔案是否存在,並且擁有SGID許可權
-k FILENAME:判斷該檔案是否存在,並且擁有StickyBit許可權
(九)多重(組合)條件測試
邏輯運算
數字相同則為0,數字不同則為1
與運算
真 && 真=真
真 && 假=假
假 && 真=假
假 && 假=假
或運算
真 || 真=真
真 || 假=真
假 || 真=真
假 || 假=假
非運算
! 真=假
! 假=真
邏輯與:&&
COMMAND1 && COMMAND2
EXPRESSION1 -a EXPRESSION2
邏輯或:||
COMMAND1 || COMMAND2
EXPRESSION1 –o EXPRESSION2
邏輯非:!
! COMMAND
! EXPRESSION
一行中可以執行多條語句,語句間用分號“;”分割;不管前面的語句是否正確執行,後面的語句都會執行
語句1 ; 語句2
bash自定義退出狀態碼
語法:exit [N]
指令碼中一旦遇到exit命令,指令碼會立即終止;終止退出狀態取決於exit命令後面的數字
注意:shell程序遇到exit時,即會終止,因此,整個指令碼執行即為結束
狀態碼範圍:1~255之間
如果未給指令碼指定退出狀態碼,整個指令碼的退出狀態碼取決於指令碼中執行的最後一條命令的狀態碼
遇到exit,bash程序會立即終止