搜索
首页运维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 03, 2025 am 12:09 AM

Linux是一个基于Unix的多用户、多任务操作系统,强调简单性、模块化和开放性。其核心功能包括:文件系统:以树状结构组织,支持多种文件系统如ext4、XFS、Btrfs,使用df-T查看文件系统类型。进程管理:通过ps命令查看进程,使用PID管理进程,涉及优先级设置和信号处理。网络配置:灵活设置IP地址和管理网络服务,使用sudoipaddradd配置IP。这些功能在实际操作中通过基本命令和高级脚本自动化得以应用,提升效率并减少错误。

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命令修复。

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

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器