shell指令碼之test測試命令
條件測試命令:
test命令 == [ 命令,bash的內建命令;
格式:
test [運算式]
[ expression ]
[[:bash的關鍵字;一般僅用於某些特定結構或格式之中;
[[ expression ]]
注意:此類條件測試命令一般沒有執行結構,僅有執行狀態傳回值;如果其執行狀態傳回值為0,則表示true;如果其執行狀態傳回值為1,則表示為false;
條件測試命令共有三類條件測試運算式:
1.數值測試 :雙目操作:
測試操作符:
-eq:測試兩個數值是否相等;相等為真,不等為假;
-ne:測試兩個數值是否不等;不等為真,相等為假;
-lt:小於,測試左邊數值是否小於右邊的數值;小於為真,不小於為假;
-gt:大於,測試左邊數值是否大於右邊的數值;大於為真,不大於為假;
-le:小於等於,測試左邊數值是否小於等於右邊的數值;小於等於為真,大於為假;
-ge:大於等於,測試左邊數值是否大於等於右邊的數值;大於等於為真,小於為假;
注意:bash僅支援認證,不支援浮點數;
[root@localhost ~]# id wangcai
uid=5003(wangcai) gid=8089(xiaoming) 組=8089(xiaoming),5002(qiuxiang)
[root@localhost ~]# test $(id -u wangcai) -ge 1000 && echo "Common User" || echo " System User"
Common User
[root@localhost ~]# [ $(id -u wangcai) -ge 1000 ] && echo "Common User" || echo " System User"
Common User
2.字串測試:
雙目測試:
==|=:測試兩個字串是否為相同的字串;相同為真,不同為假;
!=:測試兩個字串是否為不同的字串;不同為真,相同為假;
>:測試左邊的字串所對應的ASCII編碼是否比右邊的字串對應的ASCII編碼大;大於為真,小於為假;
<:測試左邊的字串所對應的ASCII編碼是否比右邊的字串對應的ASCII編碼小;小於為真,大於為假;
STRING =~ PATTERN:測試左側的字串能否被右邊的PATTERN匹配;能匹配為真,不能匹配為假;
注意:>,<,=~這三類測試操作符是只能用在[[ expression ]]測試語句中
[root@localhost ~]# [[ 100 = 100 ]] && echo "same number" || echo "different number"
same number
單目測試:
-z 'STRING':測試STRING是否為空白串;空串為真,不空為假;
-n 'STRING':測試STRING是否為非空串,不空為真,空串為假;
注意:
1)通常情況下,字串是要用引號引用的,單引號或雙引號都可以,只有在特定的情況下,只能選擇單引號或雙引號之一;
2)[]和[[]]在某些情況下,意義不完全相同,要區分對待;
3)如果使用[]或[[]]進行條件判斷,在運算式兩端都有留有空白字元,以區分命令和參數之間的關係;
4)所有的雙目測試操作符和參數之間也要留有空白字元空間;
檔案測試:
單目測試:
-a|-e FILE:測試檔案是否存在,存在為真,不存在為假;
-b FILE:測試檔案是否存在且為塊裝置檔案,存在且為塊裝置為真,否則為假;
-c FILE:測試檔案是否存在且為字元裝置檔案,存在且為字元裝置為真,否則為假;
-d FILE:測試檔案是否存在且為目錄檔案,存在且為目錄檔案為真,否則為假;
-f FILE:測試檔案是否存在且為普通檔案,存在且為普通檔案為真,否則為假;
-h|-l FILE:測試檔案是否存在且為符號連結檔案,存在且為符號連結檔案為真,否則為假;
-s FILE:測試檔案是否存在且其大小大於0,存在且其大小大於0為真,否則為假;
-S FILE:測試檔案是否存在且為通訊端檔案,存在且其為通訊端檔案為真,否則為假;
-t FD:測試檔案描述符是否在終端上被開啟,被開啟為真,否則為假;
檔案的存取權限測試:
-r FILE:測試檔案是否存在且目前使用者是否被授予讀取許可權,存在且授權為真,否則為假;
-w FILE:測試檔案是否存在且目前使用者是否被授予寫入權限,存在且授權為真,否則為假;
-x FILE:測試檔案是否存在且目前使用者是否被授予執行許可權,存在且授權為真,否則為假;
檔案特殊許可權標識測試:
-u FILE:測試檔案是否存在且設定了SUID,存在且授權為真,否則為假;
-g FILE:測試檔案是否存在且設定了SGID,存在且授權為真,否則為假;
-k FILE:測試檔案是否存在且設定了STICKY,存在且授權為真,否則為假;
檔案的所有權測試:
-O FILE:測試檔案是否存在且其屬主為當前有效使用者;存在且屬主為當前有效使用者為真,否則為假;
-G FILE:測試檔案是否存在且其屬組為當前有效使用者的所在組;存在且屬組為當前有效使用者的所在組為真,否則為假;
雙目測試:
FILE1 -ef FILE2:測試兩個檔案是否擁有相同的Ionde編號;即:兩個檔案是否為永久連結;(以後再細說)
測試語句中添加邏輯運算子號:
1.利用bash的邏輯運算子號
[ expression1 ] && [ expression2 ] 與
[ expression1 ] || [ expression2 ] 或
![ expression1 ] 非
2.利用條件測試命令本身的邏輯運算子號:
[ expression1 -a expression2 ] 與運算
[ expression1 -o expression2 ] 或運算
[ !expression1 ] 取反
命令的執行結果:
1.命令的正常輸出結果;
2.命令的執行狀態傳回值;
0-255
0:表示命令成功執行或者條件判斷為真;
1-255:表示命令執行失敗或者條件判斷為假;
1,2,127:系統預設保留;
3-126,128-255:使用者自訂的命令執行狀態傳回值;
exit命令:
exit - exit the shell
格式:
exit [n]
退出shell時可以使用n作為狀態傳回值;如果沒有指定n,則預設的狀態傳回值為最後一條命令的狀態傳回值;
注意:當shell指令碼運行時,一旦遇到exit命令,將立即結束運行此指令碼的shell進程,同時此指令碼的運行也會停止其後續的所有命令都不會再被解釋執行;因此,包含了exit命令的指令碼,不要是用source命令來執行;
[root@localhost ~]# [ -e /abcd ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -e /abcd ] | exit 5
[root@localhost ~]# echo $?
5
本文永久更新連結地址:https://www.bkjia.com/Linux/2018-03/151486.htm