test命令詳解

Craftor發表於2014-06-27

test命令格式:

test condition

通常,在if-then-else語句中,用[]代替,即[ condition ]。注意:方括號兩邊都要用空格。

 

1、數值比較
===========================================================
比 較 描 述
-----------------------------------------------------------
n1 -eq n2 檢查n1是否與n2相等 (equal)
n1 -ge n2 檢查n1是否大於或等於n2 (greater and equal)
n1 -gt n2 檢查n1是否大於n2 (greater than)
n1 -le n2 檢查n1是否小於或等於n2 (less and equal)
n1 -lt n2 檢查n1是否小於n2 (less than)
n1 -ne n2 檢查n1是否不等於n2 (not equal)
===========================================================

例子:

#!/bin/bash 

val1=10 
val2=11

if [ $val1 -gt 5 ] 
then 
echo "The test value $val1 is greater than 5" 
fi

if [ $val1 -eq $val2 ] 
then 
echo "The vaules are equal" 
else 
echo "The values are different" 
fi

 

2、字串比較
===========================================================
比 較 描 述
-----------------------------------------------------------
str1 = str2 檢查str1是否和str2相同
str1 != str2 檢查str1是否和str2不同
str1 < str2 檢查str1是否比str2小
str1 > str2 檢查str1是否比str2大
-n str1 檢查str1的長度是否非0
-z str1 檢查str1的長度是否為0
===========================================================

需要注意的是:

- 字串比較大於小於號必須轉義,即加反斜線。
- 字串比較的順序是按ASCII表的順序的,大寫字母比小寫字母的值小。

檔案比較
=======

這是shell程式設計中最強大的也是最常用到的比較。test命令允許你測試Linux檔案系統上檔案和目錄的狀態,如下表:

==================================================================
比 較 描 述
------------------------------------------------------------------
-d file 檢查file是否存在並是一個目錄
-e file 檢查file是否存在
-f file 檢查file是否存在並是一個檔案
-r file 檢查file是否存在並可讀
-s file 檢查file是否存在並非空
-w file 檢查file是否存在並可寫
-x file 檢查file是否存在並可執行
-O file 檢查file是否存在並屬當前使用者所有
-G file 檢查file是否存在並且預設組與當前使用者相同
file1 -nt file2 檢查file1是否比file2新
file1 -ot file2 檢查file1是否比file2舊
==================================================================

 

3、檢查目錄

-d測試會檢查指定的檔名是否在系統上以目錄形式存在。當寫檔案到某個目錄之前,或者是將檔案放置到某個目錄位置之前時,這會非常有用。

#!/bin/bash 
if [ -d $HOME ] 
then 
echo "Your HOME directory exists" 
cd $HOME 
ls -a 
else 
echo "There is a problem with your HOME directory" 
fi

上面程式碼使用了-d測試條件來檢查使用者的$HOME目錄是否存在。如果它存在的話,它將繼續使用cd命令來切到$HOME目錄並進行顯示目錄下的檔案。

 

4、檢查物件是否存在

-e比較允許你在指令碼中使用物件前檢查檔案或目錄物件是否存在:

#!/bin/bash 
# checking if a directory exists 
if [ -e $HOME ] 
then 
echo "OK on the directory, now to check the file" 
# checking if a file exists 
if [ -e $HOME/testing ] 
then 
# the file exists, append date to it 
echo "Appending date to existing file" 
date >> $HOME/testing 
else 
# the file does not exist, create a new file 
echo "Creating new file" 
echo > $HOME/testing 
fi 
else 
echo "Sorry, you do not have a HOME directory" 
fi

 

5、檢查檔案

-e比較適用於檔案和目錄。但要確定指定的物件是個檔案,你必須用-f比較:

#!/bin/bash 
# check if a file 
if [ -e $HOME ] 
then 
echo "The object exists, is it a file?" 
if [ -f $HOME ] 
then 
echo "Yes, it is a file!" 
else 
echo "No, it is not a file!" 
if [ -f $HOME/.bash_history ] 
then 
echo "But this is a file!" 
fi 
fi 
else 
echo "Sorry, the object does not exist" 
fi

6、檢查是否可讀

在嘗試從檔案中讀取資料之前,最好先測試一下是否能讀檔案。可以用-r測試。

7、檢查空檔案

用-s來檢查檔案是否為空,尤其是在你要刪除檔案時。當-s比較成功時要特別小心,它說明檔案中有資料。

8、檢查是否可寫

-w比較用來判斷你是否對檔案有可寫許可權。

9、檢查是否可執行

-x比較是一個簡便的斷判斷你對某個特定檔案是否有執行許可權的方法。雖然可能大多數命令用不到它,但如果你要在shell中執行大量指令碼,它可能很方便。

10、檢查所屬關係

-O比較允許你輕鬆地測試你是否是檔案的屬主。

11、檢查預設屬組關係

-G比較會檢查檔案的預設組,如果它匹配了使用者的預設組,那就通過了。