要檢測系統上某些文件或相關屬性時,我們可以使用test命令,比如:檢查/root/ztj.txt文件是否存在,可以使用test -e /root/ztj.txt命令,不過執行結果不會顯示任何信息,需配合$?或&&及||來展現具體結果
E.g:
[root@kibana ~]# test -e /root/ztj.txt && echo "ztj.txt exist" || echo "ztj.txt not exist"
ztj.txt exist
[root@kibana ~]#
其中,-e是測試一個“東西”是否存在,其它測試標志如下:
1.文件名“類型”檢測(存在與否)
測試標志 | 說明 |
-e | “文件名”是否存在 |
-f | “文件名”是否為文件 |
-d | “文件名”是否為目錄 |
-b | “文件名”是否為一個塊設備 |
-c | “文件名”是否為一個字符設備 |
-p | “文件名”是否為一個FIFO(管道)文件 |
-S | “文件名”是否為一個套接字文件 |
-L | “文件名”是否為一個鏈接文件 |
2.文件權限檢測
測試標志 | 說明 |
-r | 檢測該文件名是否具有“可讀”屬性 |
-w | 檢測該文件名是否具有“可寫”屬性 |
-x | 檢測該文件名是否具有“可執行”屬性 |
-u | 檢測該文件名是否具有“SUID”屬性 |
-g | 檢測該文件名是否具有“SGID”屬性 |
-k | 檢測該文件名是否具有“Sticky bit”屬性 |
-s | 檢測該文件名是否為“非空白文件” |
3.文件比較
測試標志 | 說明 |
-nt | (newer than)判斷file1是否比file2新 |
-ot | (older than)判斷file1是否比file2舊 |
-ef | 判斷file1與file2是否為同一文件,可用于判斷硬鏈接,主要判斷兩個文件是否均指向同一個iNode |
4.整數判斷
測試標志 | 說明 |
-eq | 兩數值相等(equal) |
-ne | 兩數值不等(not equal) |
-gt | n1大于n2(greater than) |
-lt | n1小于n2(less than) |
-ge | n1大于等于n2(greater than or equal) |
-le | n1小于等于n2(less than or equal) |
5.字符串判斷
測試標志 | 說明 |
test -z string | 判斷字符串是否為0,若string為空字符串,則為TRUE |
test -n string | 判斷字符串是否非為0,若string為空字符串,則為FALSE 其中:-n可省略 |
test str1 = str2 | 判斷str1是否等于str2,若相等,則返回true |
test str1 != str2 | 判斷str1是否不等于str2,若不相等,則返回true |
6.多重條件判斷
測試標志 | 說明 |
-a | (and)兩個條件同時成立。E.g:test -r file -a -x file,表示file同時具有r與x權限時,則回傳true |
-o | (or)兩個條件任何一個成立。E.g:test -r file -o -x file,表示file具有r或x權限時,則回傳true |
! | 條件求反,E.g:test ! -x file,當file不具有x時,則回傳true |
test樣例:
[root@kibana ~]# cat test.sh
#!/bin/bash#讓用戶輸入文件名,并且判斷用戶是否真的輸入了字符串
echo -e "The program will show you if the filename exists which input by you.\n\n"
read -p "Input a filename : " filename
test -z $filename && echo "You need to input a filename." && exit 0
#判斷文件是否存在
test ! -e $filename && echo "The filename $filename does not exist" && exit 0
#判斷文件類型與屬性
test -f $filename && filetype="regular file"
test -d $filename && filetype="directory"
test -r $filename && perm="readable"
test -w $filename && perm="$perm writeable"
test -x $filename && perm="$perm executable"
#信息輸出
echo -n "The filename $filename is a $filetype"
echo ",And the permission are $perm"
[root@kibana ~]#
[root@kibana ~]# sh test.sh
The program will show you if the filename exists which input by you.Input a filename : ztj.txt
The filename ztj.txt is a regular file,And the permission are readable writeable
[root@kibana ~]#