如何在Bash中檢查檔案或目錄是否存在?


介紹

作為程式設計師或系統管理員,您可能需要經常檢查檔案或目錄是否存在。Bash(Bourne-Again SHell 的縮寫)是一個基於 Unix 的命令列介面,它提供了強大的指令碼功能。在本文中,我們將探討如何在 Bash 中檢查檔案或目錄是否存在。

檢查檔案是否存在

在 Bash 指令碼中,在對檔案執行某些操作之前,通常需要檢查檔案是否存在。幸運的是,Bash 提供了幾種方法來完成此任務。

使用“test”命令

“test”命令是 Bash 的內建命令,用於檢查各種條件並根據條件是否滿足返回真/假結果。“test”命令檢查檔案是否存在,可以使用“-e”選項,並將檔案路徑作為其引數。

語法和選項

$ test -e FILE_PATH 

“-e”選項檢查 FILE_PATH 是否存在,並返回真 (0) 或假 (1)。可以使用"$?"捕獲此檢查的退出狀態。返回值 0 表示檔案存在,而 1 表示檔案不存在。

使用“test”命令檢查檔案存在的示例

示例 1

 Check if "/etc/passwd" file exists $ test -e /etc/passwd $ echo $? 0 
 

示例 2

Check if "~/nonexistent-file.txt" file exists $ test -e ~/nonexistent-file.txt 
$ echo $? 1

注意 − 在上面的示例 2 中,“~/nonexistent-file.txt”指的是您主目錄中不存在的目錄。

使用“if”語句和“test”命令

您還可以使用“if-else-fi”語句和“test”命令來確定根據檔案是否存在採取什麼操作。

語法和選項

if test -e FILE_PATH then 

echo "File exists" else 
echo "File does not exist" fi

上述程式碼檢查 FILE_PATH 是否存在。如果存在,則執行“then”塊中的語句;否則,執行“else”塊中的語句。

使用“if”語句和“test”命令檢查檔案存在的示例

示例 1

Check if "/home/user/myfile.txt" exists and print a message accordingly if test -e /home/user/myfile.txt then 

echo "/home/user/myfile.txt exists." else 
echo "/home/user/myfile.txt does not exist." fi 

示例 2

Check if "~/myfolder" folder exists and print a message accordingly. if test -e ~/myfolder/ 
then echo "~/myfolder/ directory exists." 
else echo "~/myfolder/ directory does not exist." 
fi

使用這兩種方法中的任何一種,您可以在對檔案執行操作之前檢查檔案是否存在,從而避免由於檔案路徑不正確或檔案丟失而可能發生的錯誤。

檢查目錄是否存在

目錄是檔案系統的重要組成部分,它們提供了一種組織和構造檔案的方法。檢查目錄是否存在是許多 Bash 指令碼中的第一步,這些指令碼需要處理檔案和目錄。

使用“-d”選項和“test”命令

“-d”選項與“test”命令一起使用,以檢查路徑是否對應於現有目錄。使用“-d”選項的語法如下:

if test -d /path/to/directory then 
echo "Directory exists" else 
echo "Directory does not exist" fi  

如果給定路徑對應於現有目錄,則此命令將返回真並列印“目錄存在”。否則,它將返回假並列印“目錄不存在”。

語法和選項

要使用“-d”選項檢查路徑是否對應於現有目錄,我們將它與 test 命令一起使用。語法如下:```

test -d /path/to/directory ``` "/path/to/directory" 應替換為需要檢查的目錄的實際路徑。

使用“-d”選項和“test”命令檢查目錄存在的示例

以下是一些如何在 Bash 中使用“-d”選項的示例:

# Check if "/etc/" exists or not. if [ -d "/etc/" ]; then 
echo "Directory /etc/ exists." else 
echo "There is no /etc/ directory." fi 
# Check if "/abc/def/" exists or not. if [ -d "/abc/def/" ]; then 
echo "/abc/def/ Directory exists." else 
echo "/abc/def/ There is no such directory." fi  

使用“-e”選項和“test”命令

“-e”選項可用於檢查路徑是否對應於現有檔案或目錄。如果給定路徑存在,則此命令將返回真。否則,它將返回假。

語法和選項

要使用“-e”選項檢查路徑是否對應於現有檔案或目錄,我們將它與 test 命令一起使用。語法如下:

test -e /path/to/file_or_directory  

"/path/to/file_or_directory" 應替換為需要檢查的檔案或目錄的實際路徑。

使用“-e”選項檢查目錄存在的示例

以下是一些如何在 Bash 中使用“-e”選項的示例:

# Check if "/etc/" exists. 
if [ -e "/etc/" ]; then echo "Directory /etc/ exists." 
else echo "There is no /etc/ directory." 
fi # Check if "/abc/def/" exists. 
if [ -e "/abc/def/" ]; then echo "/abc/def/ Directory exists." 
else echo "/abc/def/ There is no such directory." 
fi  

透過遵循這些在 Bash 中檢查檔案和目錄存在的方法,您可以確保您的指令碼順利執行,而不會遇到任何錯誤。

常見錯誤和故障排除

在 Bash 中檢查檔案或目錄的存在似乎很簡單,但是有一些常見的錯誤會導致此過程中出現問題。最常見的錯誤之一是在檔名或路徑包含空格時忘記引用檔名或路徑。例如:

test -f /path/to/my file.txt

上述命令將失敗,因為 Bash 將“my”和“file.txt”視為單獨的引數。為避免此問題,請將整個路徑用引號括起來:

test -f "/path/to/my file.txt"

另一個錯誤是在檢查目錄存在時使用錯誤的測試選項。例如,使用“-f”而不是“-d”將導致不正確的結果。

檢查檔案或目錄是否存在時可能出現的錯誤

以下是檢查 Bash 中檔案或目錄是否存在時可能出現的常見錯誤列表:

  • 未引用包含空格的檔名/路徑

  • 使用“-f”而不是“-d”來檢查目錄是否存在,反之亦然

  • 忘記指定絕對路徑,並依賴可能在不同系統上不準確或不一致的相對路徑。

  • 濫用“if-then”語句,忽略在測試命令周圍新增括號。

  • 許可權使用不當,這會影響對檔案和目錄的訪問。

結論

在 Bash 中,檢查檔案或目錄是否存在是一項至關重要的任務。瞭解如何操作可以為開發者節省大量時間和精力。

有不同的方法可以檢查檔案或目錄是否存在,但是最常見的方法是透過“test”命令和“-d”選項。請記住,檢查檔案或目錄的存在只是在 Bash 中管理檔案和目錄的一個方面。

重要的是要了解整體檔案系統結構、許可權以及如何使用諸如“cd”、“ls”和“pwd”之類的 Bash 命令在目錄中導航。掌握這些知識後,您將成為熟練的 Bash 使用者!

更新於:2023年8月31日

4K+ 次檢視

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.