欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux中Shell腳本判斷文件/文件夾是否存在方法

 更新時(shí)間:2023年06月27日 08:41:55   作者:Linux265  
很多時(shí)候我們?cè)谧鲞\(yùn)維的時(shí)候,我們需要做一些自動(dòng)化,這時(shí)我們就需要寫(xiě)一些shell腳本,既然要用到shell腳本,就免不了文件操作,這篇文章主要給大家介紹了關(guān)于Linux中Shell腳本判斷文件/文件夾是否存在的相關(guān)資料,需要的朋友可以參考下

前言

在Linux系統(tǒng)中編寫(xiě)腳本時(shí)候,常常會(huì)碰到需要判斷文件或文件夾是否存在的情況。遇到這種情況,你可以通過(guò)test命令來(lái)檢查文件是否存在,并確定文件的類(lèi)型。

test命令采用以下語(yǔ)法格式:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

如果你希望你的腳本具有很強(qiáng)的兼容性和可移植性,你可以是由舊的test命令格式[,該命令在所有POSIX shell上都可用。大多數(shù)使用Bash、Zsh和Ksh作為默認(rèn)shell的現(xiàn)代系統(tǒng)都支持test命令[[(雙括號(hào))的新升級(jí)版本。

01、檢查文件是否存在

當(dāng)你在shell中需要檢查一個(gè)文件是否存在時(shí),通常需要使用到文件操作符-e-f。第一個(gè)-e用來(lái)檢查文件是否存在,而不管文件類(lèi)型。第二個(gè)-f僅僅用來(lái)檢查文件是常規(guī)文件(不是目錄或設(shè)備)時(shí)返回true。

當(dāng)檢查文件是否存在時(shí),命令中的操作選項(xiàng)通常將test命令不同格式和if語(yǔ)句結(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

如果你需要通過(guò)判斷文件是否存在進(jìn)行不同的操作,只需要使用類(lèi)似如下if/then格式語(yǔ)句即可。

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

在處理文件名稱(chēng)中包含有空格的文件時(shí),請(qǐng)使用雙引號(hào)避免出現(xiàn)一些處理問(wèn)題。你也可以在不使用if語(yǔ)句的情況下使用test命令,只有當(dāng)test命令執(zhí)行后的結(jié)果為true時(shí),跟在test命令&&運(yùn)算符之后的內(nèi)容才會(huì)被執(zhí)行。

示例如下:

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

如果要在&&運(yùn)算符之后運(yùn)行一系列命令,只需將命令括在用;&&分隔的大括號(hào)中:

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

&&相反,只有在test命令的exit狀態(tài)為false時(shí),才會(huì)執(zhí)行||運(yùn)算符后面的語(yǔ)句。

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

02、檢查目錄是否存在

Linux系統(tǒng)中運(yùn)算符-d允許你測(cè)試一個(gè)文件是否時(shí)目錄。

例如檢查/etc/docker目錄是否存在,你可以使用如下腳本:

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

如果你喜歡你也可以使用雙括號(hào)[[代替腳本中的單括號(hào)[。

03、檢查文件是否不存在

和其他語(yǔ)言相似,test表達(dá)式允許使用!(感嘆號(hào))做邏輯not運(yùn)算,示例如下:

FILE=/etc/docker
if [ ! -f "$FILE" ]; then
    echo "$FILE does not exist"
fi
[ ! -f /etc/docker ] && echo "$FILE does not exist"

04、檢查是否存在多個(gè)文件

不使用復(fù)雜的嵌套if/else構(gòu)造,您可以使用-a(或帶[[&&預(yù)算符)來(lái)測(cè)試是否存在多個(gè)文件,示例如下:

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

以下腳本語(yǔ)句為不使用if語(yǔ)句等效語(yǔ)句:

[ -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命令運(yùn)算符

test命令包含以下文件操作運(yùn)算符,這些運(yùn)算符允許你測(cè)試不同類(lèi)型的文件:

  • -b FILE - 如果文件存在并且是塊特殊文件,則為T(mén)rue。
  • -c FILE - 如果文件存在并且是特殊字符文件,則為T(mén)rue。
  • -d FILE - 如果文件存在并且是目錄,則為T(mén)rue。
  • -e FILE - 如果文件存在并且是文件,則為T(mén)rue,而不考慮類(lèi)型(節(jié)點(diǎn)、目錄、套接字等)。
  • -f FILE - 如果文件存在并且是常規(guī)文件(不是目錄或設(shè)備),則為T(mén)rue。
  • -G FILE - 如果文件存在并且與運(yùn)行命令的用戶(hù)具有相同的組,則為T(mén)rue。
  • -h FILE - 如果文件存在并且是符號(hào)鏈接,則為T(mén)rue。
  • -g FILE - 如果文件存在并已設(shè)置組id(sgid)標(biāo)志,則為T(mén)rue。
  • -k FILE - 如果文件存在并設(shè)置了粘滯位標(biāo)志,則為T(mén)rue。
  • -L FILE - 如果文件存在并且是符號(hào)鏈接,則為T(mén)rue。
  • -O FILE - 如果文件存在并且由運(yùn)行該命令的用戶(hù)擁有,則為T(mén)rue。
  • -p FILE - 如果文件存在并且是管道,則為T(mén)rue。
  • -r FILE - 如果文件存在且可讀,則為T(mén)rue。
  • -S FILE - 如果文件存在并且是套接字,則為T(mén)rue。
  • -s FILE - 如果文件存在且大小不為零,則為T(mén)rue。
  • -u FILE - 如果文件存在并且設(shè)置了(suid)標(biāo)志,則為T(mén)rue。
  • -w FILE - 如果文件存在且可寫(xiě),則為T(mén)rue。
  • -x FILE - 如果文件存在且可執(zhí)行,則為T(mén)rue。

06、寫(xiě)在最后

在本教程中,我們向您展示了如何在Linux系統(tǒng)中使用shell檢查文件或目錄是否存在。 

到此這篇關(guān)于Linux中Shell腳本判斷文件/文件夾是否存在方法的文章就介紹到這了,更多相關(guān)Shell腳本判斷文件存在內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論