最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

test命令采用以下語法格式:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

如果你希望你的腳本具有很強的兼容性和可移植性,你可以是由舊的test命令格式[,該命令在所有POSIX shell上都可用。大多數(shù)使用Bash、Zsh和Ksh作為默認(rèn)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)標(biāo)志,則為True。
  • -k FILE - 如果文件存在并設(shè)置了粘滯位標(biāo)志,則為True。
  • -L FILE - 如果文件存在并且是符號鏈接,則為True。
  • -O FILE - 如果文件存在并且由運行該命令的用戶擁有,則為True。
  • -p FILE - 如果文件存在并且是管道,則為True。
  • -r FILE - 如果文件存在且可讀,則為True。
  • -S FILE - 如果文件存在并且是套接字,則為True。
  • -s FILE - 如果文件存在且大小不為零,則為True。
  • -u FILE - 如果文件存在并且設(shè)置了(suid)標(biāo)志,則為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)文章

  • 一文教會你如何使用grep跨多行查找模式匹配

    一文教會你如何使用grep跨多行查找模式匹配

    grep匹配是linux的最常用的shell命令之一,這篇文章主要給大家介紹了關(guān)于如何使用grep跨多行查找模式匹配的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Linux文件操作命令詳解與實戰(zhàn)

    Linux文件操作命令詳解與實戰(zhàn)

    Linux 是一個文件為核心的操作系統(tǒng),文件的操作貫穿了系統(tǒng)管理和開發(fā)的方方面面,從創(chuàng)建、修改、查找文件到權(quán)限管理和壓縮操作,Linux 提供了豐富的命令支持,本文將深入解析 Linux 文件操作的常用命令,幫助讀者全面掌握其用法及應(yīng)用場景,需要的朋友可以參考下
    2024-12-12
  • Linux命令dos2unix命令示例詳解(將DOS格式文本文件轉(zhuǎn)換成Unix格式)

    Linux命令dos2unix命令示例詳解(將DOS格式文本文件轉(zhuǎn)換成Unix格式)

    dos2unix命令 用來將DOS格式的文本文件轉(zhuǎn)換成UNIX格式的,而Unix格式的文本文件在Windows下用Notepad打開時會拼在一起顯示,本文介紹Linux命令dos2unix命令示例詳解(將DOS格式文本文件轉(zhuǎn)換成Unix格式),感興趣的朋友一起看看吧
    2024-04-04
  • linux使用select實現(xiàn)精確定時器詳解

    linux使用select實現(xiàn)精確定時器詳解

    本文講述如何使用select實現(xiàn)超級時鐘。使用select函數(shù),我們能實現(xiàn)微妙級別精度的定時器。同時,select函數(shù)也是我們在編寫非阻塞程序時經(jīng)常用到的一個函數(shù)
    2013-11-11
  • shell中case的用法學(xué)習(xí)筆記

    shell中case的用法學(xué)習(xí)筆記

    這篇文章主要為大家介紹shell中的case語句:可以把變量的內(nèi)容與多個模板進行匹配,再根據(jù)成功匹配的模板去決定應(yīng)該執(zhí)行哪部分代碼
    2013-11-11
  • Shell腳本中[]和[[]]區(qū)別詳解

    Shell腳本中[]和[[]]區(qū)別詳解

    在 Shell 腳本中,[] 和 [[]] 是用于條件測試的不同語法結(jié)構(gòu),它們有一些區(qū)別,主要體現(xiàn)在對字符串處理和表達式的支持上,這篇文章主要介紹了Shell腳本中[]和[[]]區(qū)別,需要的朋友可以參考下
    2023-12-12
  • Linux nano命令使用示例

    Linux nano命令使用示例

    nano是一個小型、免費、友好的編輯器,旨在取代非免費Pine包中的默認(rèn)編輯器Pico,nano是一個字符終端的文本編輯器,有點像DOS下的editor程序,這篇文章主要介紹了Linux nano命令使用示例,需要的朋友可以參考下
    2023-03-03
  • 詳解shell 函數(shù)定義與調(diào)用

    詳解shell 函數(shù)定義與調(diào)用

    這篇文章主要介紹了shell 函數(shù)定義與調(diào)用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)shell,感興趣的朋友可以了解下
    2020-09-09
  • Shell腳本變量${}與命令$()替換區(qū)別小結(jié)

    Shell腳本變量${}與命令$()替換區(qū)別小結(jié)

    在Shell腳本中,取變量值使用 ${},而 $() 用于命令替換,本文就來詳細(xì)的介紹一下Shell腳本變量${}與命令$()替換區(qū)別小結(jié),感興趣的可以了解一下
    2025-11-11
  • 在Linux中實現(xiàn)scp命令自動輸入密碼的方法

    在Linux中實現(xiàn)scp命令自動輸入密碼的方法

    本文介紹了在Linux環(huán)境下使用scp命令自動輸入密碼的三種方法:SSH密鑰認(rèn)證、sshpass工具和expect腳本,推薦使用SSH密鑰認(rèn)證以確保數(shù)據(jù)傳輸?shù)陌踩?感興趣的朋友一起看看吧
    2025-03-03

最新評論

嘉兴市| 定结县| 响水县| 博兴县| 大姚县| 兰西县| 松原市| 万源市| 延安市| 思茅市| 谷城县| 教育| 大姚县| 新竹县| 精河县| 尉氏县| 博兴县| 三门峡市| 汤阴县| 塘沽区| 绍兴县| 四川省| 东乡族自治县| 马山县| 河北区| 宿迁市| 石首市| 河源市| 安宁市| 浮山县| 新建县| 海伦市| 沾化县| 白山市| 虹口区| 五原县| 江油市| 山东省| 淳安县| 唐山市| 海兴县|