搜尋
首頁運維linux運維如何檢查Bash中是否存在檔案或目錄

很多時候,在編寫Shell腳本時,需要根據檔案是否存在來執行操作。那麼如何檢查文件是否存在?以下這篇文章就來帶大家了解如何使用test指令來檢查Bash中是否存在檔案或目錄,希望對大家有幫助。

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

test指令

#在Bash中,可以使用test指令檢查檔案是否存在並確定文件的類型。

test指令採用以下語法形式之一:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

如果希望腳本是可移植的,那麼應該偏好使用在所有POSIX shell上都可用的舊test [ 指令。在大多數使用bash、zsh和ksh作為預設shel的現代系統上,都支援測試指令[[(雙括號)的新升級版本。

test指令的File運算子

##test指令包括以下File操作符,允許測試特定類型的檔案:

 ● -b FILE :如果FILE存在且為區塊特殊文件,則為True。

 ● -c FILE :如果FILE存在且為特殊字元文件,則為True。

 ● -d FILE :如果FILE存在且為目錄,則為True。

 ● -e FILE :如果FILE存在且為文件,則為True,無論類型(節點,目錄,套接字等)如何。

 ● -f FILE :如果FILE存在且為常規檔案(不是目錄或裝置),則為True。

 ● -G FILE :如果FILE存在且與執行命令的使用者俱有相同的群組,則為True。

 ● -h FILE :如果FILE存在且為符號鏈接,則為True。

 ● -g FILE :如果FILE存在且設定了set-group-id(sgid)標誌,則為True。

 ● -k FILE :如果FILE存在且設定了黏滯位標誌,則為True。

 ● -L FILE :如果FILE存在且為符號鏈接,則為True。

 ● -O FILE :如果FILE存在並且由執行該命令的使用者擁有,則為True。

 ● -p FILE :如果FILE存在且為管道,則為True。

 ● -r FILE :如果FILE存在且可讀,則為True。

 ● -S FILE :如果FILE存在且為套接字,則為True。

 ● -s FILE :如果FILE存在且非零大小,則為True。

 ● -u FILE :如果設定了exists和set-user-id(suid)標誌,則為True。

 ● -w FILE :如果FILE存在且可寫,則為True。

 ● -x FILE :如果FILE存在且可執行,則為True。

如何檢查檔案是否存在?

在檢查檔案是否存在時,最常用的FILE運算子是-e和-f。第一個操作符將檢查檔案是否存在,而不管檔案類型如何;第二個操作符將僅在檔案是常規檔案(不是目錄或裝置)時傳回true。

檢查檔案是否存在時,最可讀的選項是結合使用test指令和if語句。以下任何程式碼片段都會檢查/etc/resolv.conf檔案是否存在:

FILE=/etc/resolv.conf
if test -f "$FILE"; then
    echo "$FILE exist"
fi
FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
fi
FILE=/etc/resolv.conf
if [[ -f "$FILE" ]]; then
    echo "$FILE exist"
fi

如果要根據檔案是否存在執行不同的操作,只需使用if / then結構:

FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
else 
    echo "$FILE does not exist"
fi

附註:在處理名稱中包含空格的檔案時,請務必使用雙引號以避免問題。

也可以使用不帶if語句的test指令。只有當測試命令的退出狀態為true時,才會執行&&運算子後的命令,

test -f /etc/resolv.conf && echo "$FILE exist"
[ -f /etc/resolv.conf ] && echo "$FILE exist"
[[ -f /etc/resolv.conf ] && echo "$FILE exist"

如果要在&&運算子之後運行一系列命令,只需將命令括在以“;”或“&&”分隔的大括號中即可。

[ -f /etc/resolv.conf ] && { echo "$FILE exist"; cp "$FILE" /tmp/; }

與&相反,||運算子後面的語句只在測試指令的退出狀態為false時執行。

[ -f /etc/resolv.conf ] && echo "$FILE exist" || echo "$FILE does not exist"

如何檢查目錄是否存在?

-d運算子允許測試檔案是否為目錄。

例如,要檢查/etc/docker目錄是否存在,需要使用:

FILE=/etc/docker
if [ -d "$FILE" ]; then
    echo "$FILE is a directory"
fi
[ -d /etc/docker ] && echo "$FILE is a directory"

同樣,也可以使用雙括號[[而不是單一括號[。

如何檢查檔案是否不存在?

與許多其他語言類似,可以使用! (感嘆號)邏輯非運算子來否定測試表達式:

FILE=/etc/docker
if [ ! -f "$FILE" ]; then
    echo "$FILE exist and it is a directory"
fi

與上述相同:

[ ! -f /etc/docker ] || echo "$FILE does not exist"

如何檢查是否存在多個檔案?

如果存在多個文件,可以使用-a(或&&with[])來測試,而不是使用複雜的嵌套if/else構造:

FILE=/etc/docker
if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi
FILE=/etc/docker
if [ -f /etc/resolv.conf && -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi

不使用IF語句的等效變體:

[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "both files exist"
[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "both files exist"

相關影片教學推薦:《

Linux教學

以上就是本篇文章的全部內容,希望能對大家的學習有幫助。更多精彩內容大家可以追蹤php中文網相關教學欄位! ! !

以上是如何檢查Bash中是否存在檔案或目錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Linux:進入和退出維護模式Linux:進入和退出維護模式May 02, 2025 am 12:01 AM

進入Linux維護模式的方法包括:1.編輯GRUB配置文件,添加"single"或"1"參數並更新GRUB配置;2.在GRUB菜單中編輯啟動參數,添加"single"或"1"。退出維護模式只需重啟系統。通過這些步驟,你可以在需要時快速進入維護模式,並安全地退出,確保系統的穩定性和安全性。

了解Linux:定義的核心組件了解Linux:定義的核心組件May 01, 2025 am 12:19 AM

Linux的核心組件包括內核、shell、文件系統、進程管理和內存管理。 1)內核管理系統資源,2)shell提供用戶交互界面,3)文件系統支持多種格式,4)進程管理通過fork等系統調用實現,5)內存管理使用虛擬內存技術。

Linux的構建塊:關鍵組件解釋了Linux的構建塊:關鍵組件解釋了Apr 30, 2025 am 12:26 AM

Linux系統的核心組成部分包括內核、文件系統和用戶空間。 1.內核管理硬件資源並提供基本服務。 2.文件系統負責數據存儲和組織。 3.用戶空間運行用戶程序和服務。

使用維護模式:故障排除和修復Linux使用維護模式:故障排除和修復LinuxApr 29, 2025 am 12:28 AM

維護模式是Linux系統中通過單用戶模式或救援模式進入的特殊運行級別,用於系統維護和修復。 1.進入維護模式使用命令“sudosystemctlisolaterescue.target”。 2.在維護模式中,可以檢查並修復文件系統,使用命令“fsck/dev/sda1”。 3.高級用法包括重置root用戶密碼,需掛載文件系統為讀寫模式並編輯密碼文件。

Linux維護模式:了解目的Linux維護模式:了解目的Apr 28, 2025 am 12:01 AM

維護模式用於系統維護和修復,允許管理員在簡化環境中工作。 1.系統修復:修復損壞的文件系統和啟動加載器。 2.密碼重置:重置root用戶密碼。 3.軟件包管理:安裝、更新或刪除軟件包。通過修改GRUB配置或使用特定鍵進入維護模式,執行維護任務後可安全退出。

Linux操作:網絡和網絡配置Linux操作:網絡和網絡配置Apr 27, 2025 am 12:09 AM

Linux網絡配置可以通過以下步驟完成:1.配置網絡接口,使用ip命令臨時設置或編輯配置文件持久化設置。 2.設置靜態IP,適合需要固定IP的設備。 3.管理防火牆,使用iptables或firewalld工具來控製網絡流量。

Linux中的維護模式:系統管理員指南Linux中的維護模式:系統管理員指南Apr 26, 2025 am 12:20 AM

維護模式在Linux系統管理中扮演關鍵角色,幫助進行系統修復、升級和配置變更。 1.進入維護模式可以通過GRUB菜單選擇或使用命令“sudosystemctlisolaterescue.target”。 2.在維護模式下,可以執行文件系統修復和系統更新等操作。 3.高級用法包括重置root密碼等任務。 4.常見錯誤如無法進入維護模式或掛載文件系統,可通過檢查GRUB配置和使用fsck命令修復。

Linux中的維護模式:何時以及為什麼使用它Linux中的維護模式:何時以及為什麼使用它Apr 25, 2025 am 12:15 AM

使用Linux維護模式的時機和原因:1)系統啟動問題時,2)進行重大系統更新或升級時,3)執行文件系統維護時。維護模式提供安全、控制的環境,確保操作的安全性和效率,減少對用戶的影響,並增強系統的安全性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)