Linux中Shell腳本判斷文件/文件夾是否存在方法
前言
在Linux系統(tǒng)中編寫腳本時候,常常會碰到需要判斷文件或文件夾是否存在的情況。遇到這種情況,你可以通過test命令來檢查文件是否存在,并確定文件的類型。
test命令采用以下語法格式:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
如果你希望你的腳本具有很強的兼容性和可移植性,你可以是由舊的test命令格式[
,該命令在所有POSIX shell上都可用。大多數(shù)使用Bash、Zsh和Ksh作為默認shell的現(xiàn)代系統(tǒng)都支持test命令[[
(雙括號)的新升級版本。
01、檢查文件是否存在
當(dāng)你在shell中需要檢查一個文件是否存在時,通常需要使用到文件操作符-e
和-f
。第一個-e
用來檢查文件是否存在,而不管文件類型。第二個-f
僅僅用來檢查文件是常規(guī)文件(不是目錄或設(shè)備)時返回true。
當(dāng)檢查文件是否存在時,命令中的操作選項通常將test命令不同格式和if語句結(jié)合使用。下面的示例shell代碼將檢查/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
在處理文件名稱中包含有空格的文件時,請使用雙引號避免出現(xiàn)一些處理問題。你也可以在不使用if語句的情況下使用test命令,只有當(dāng)test命令執(zhí)行后的結(jié)果為true時,跟在test命令&&
運算符之后的內(nèi)容才會被執(zhí)行。
示例如下:
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/; }
與&&
相反,只有在test命令的exit狀態(tài)為false
時,才會執(zhí)行||
運算符后面的語句。
[ -f /etc/resolv.conf ] && echo "$FILE exist" || echo "$FILE does not exist"
02、檢查目錄是否存在
Linux系統(tǒng)中運算符-d
允許你測試一個文件是否時目錄。
例如檢查/etc/docker
目錄是否存在,你可以使用如下腳本:
FILE=/etc/docker if [ -d "$FILE" ]; then echo "$FILE is a directory" fi [ -d /etc/docker ] && echo "$FILE is a directory"
如果你喜歡你也可以使用雙括號[[
代替腳本中的單括號[
。
03、檢查文件是否不存在
和其他語言相似,test表達式允許使用!
(感嘆號)做邏輯not運算,示例如下:
FILE=/etc/docker if [ ! -f "$FILE" ]; then echo "$FILE does not exist" fi [ ! -f /etc/docker ] && echo "$FILE does not exist"
04、檢查是否存在多個文件
不使用復(fù)雜的嵌套if/else
構(gòu)造,您可以使用-a
(或帶[[
的&&
預(yù)算符)來測試是否存在多個文件,示例如下:
if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then echo "Both files exist." fi if [[ -f /etc/resolv.conf && -f /etc/hosts ]]; then echo "Both files exist." 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."
05、文件test命令運算符
test命令包含以下文件操作運算符,這些運算符允許你測試不同類型的文件:
-b
FILE
- 如果文件存在并且是塊特殊文件,則為True。-c
FILE
- 如果文件存在并且是特殊字符文件,則為True。-d
FILE
- 如果文件存在并且是目錄,則為True。-e
FILE
- 如果文件存在并且是文件,則為True,而不考慮類型(節(jié)點、目錄、套接字等)。-f
FILE
- 如果文件存在并且是常規(guī)文件(不是目錄或設(shè)備),則為True。-G
FILE
- 如果文件存在并且與運行命令的用戶具有相同的組,則為True。-h
FILE
- 如果文件存在并且是符號鏈接,則為True。-g
FILE
- 如果文件存在并已設(shè)置組id(sgid)標志,則為True。-k
FILE
- 如果文件存在并設(shè)置了粘滯位標志,則為True。-L
FILE
- 如果文件存在并且是符號鏈接,則為True。-O
FILE
- 如果文件存在并且由運行該命令的用戶擁有,則為True。-p
FILE
- 如果文件存在并且是管道,則為True。-r
FILE
- 如果文件存在且可讀,則為True。-S
FILE
- 如果文件存在并且是套接字,則為True。-s
FILE
- 如果文件存在且大小不為零,則為True。-u
FILE
- 如果文件存在并且設(shè)置了(suid)標志,則為True。-w
FILE
- 如果文件存在且可寫,則為True。-x
FILE
- 如果文件存在且可執(zhí)行,則為True。
06、寫在最后
在本教程中,我們向您展示了如何在Linux系統(tǒng)中使用shell檢查文件或目錄是否存在。
到此這篇關(guān)于Linux中Shell腳本判斷文件/文件夾是否存在方法的文章就介紹到這了,更多相關(guān)Shell腳本判斷文件存在內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Shell腳本把文件從GBK轉(zhuǎn)為UTF-8編碼
這篇文章主要介紹了Shell腳本把文件從GBK轉(zhuǎn)為UTF-8編碼,需要的朋友可以參考下2014-06-06shell實現(xiàn)自動adsl撥號并檢測連接狀況腳本分享
這篇文章主要介紹了shell實現(xiàn)自動adsl撥號并檢測連接狀況腳本分享,本文給出了兩個腳本,一個是自動撥號腳本,一個是檢測連接狀態(tài)腳本,需要的朋友可以參考下2014-12-12linux系統(tǒng)mysql自動備份并使用ftp上傳的方法
這篇文章主要介紹了linux系統(tǒng)自動導(dǎo)出mysql備份,并上傳到指定ftp,還可以刪除舊的備份文件,大家參考使用吧2014-01-01編寫shell腳本實現(xiàn)tomcat定時重啟的方法
這篇文章主要介紹了編寫shell腳本實現(xiàn)tomcat定時重啟的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Shell兩種for循環(huán)對應(yīng)實現(xiàn)方法解析
這篇文章主要介紹了Shell兩種for循環(huán)對應(yīng)實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08shell Bash的數(shù)組與關(guān)聯(lián)數(shù)組的實現(xiàn)
本文主要介紹了shell Bash的數(shù)組與關(guān)聯(lián)數(shù)組的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02linux軟件版本管理命令update-alternatives使用詳解
這篇文章主要介紹了linux軟件版本管理命令update-alternatives使用詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04bash腳本編程學(xué)習(xí)之算術(shù)運算與文件查找
算數(shù)運算在每個編程語言里面是最基本的功能,在bash里面也是。下面這篇文章就給大家詳細介紹了腳本編程bash中的算術(shù)運算與文件查找,文中還給出了多道練習(xí)題和答案,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-12-12