很多时候,在编写Shell脚本时,需要根据文件是否存在来执行操作。那么如何检查文件是否存在?下面本篇文章就来带大家了解如何使用test命令来检查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中文网其他相关文章!

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

进入Linux维护模式的方法包括:1.编辑GRUB配置文件,添加"single"或"1"参数并更新GRUB配置;2.在GRUB菜单中编辑启动参数,添加"single"或"1"。退出维护模式只需重启系统。通过这些步骤,你可以在需要时快速进入维护模式,并安全地退出,确保系统的稳定性和安全性。

Linux的核心组件包括内核、shell、文件系统、进程管理和内存管理。1)内核管理系统资源,2)shell提供用户交互界面,3)文件系统支持多种格式,4)进程管理通过fork等系统调用实现,5)内存管理使用虚拟内存技术。

Linux系统的核心组成部分包括内核、文件系统和用户空间。1.内核管理硬件资源并提供基本服务。2.文件系统负责数据存储和组织。3.用户空间运行用户程序和服务。

维护模式是Linux系统中通过单用户模式或救援模式进入的特殊运行级别,用于系统维护和修复。1.进入维护模式使用命令“sudosystemctlisolaterescue.target”。2.在维护模式中,可以检查并修复文件系统,使用命令“fsck/dev/sda1”。3.高级用法包括重置root用户密码,需挂载文件系统为读写模式并编辑密码文件。

维护模式用于系统维护和修复,允许管理员在简化环境中工作。1.系统修复:修复损坏的文件系统和启动加载器。2.密码重置:重置root用户密码。3.软件包管理:安装、更新或删除软件包。通过修改GRUB配置或使用特定键进入维护模式,执行维护任务后可安全退出。

Linux网络配置可以通过以下步骤完成:1.配置网络接口,使用ip命令临时设置或编辑配置文件持久化设置。2.设置静态IP,适合需要固定IP的设备。3.管理防火墙,使用iptables或firewalld工具来控制网络流量。

维护模式在Linux系统管理中扮演关键角色,帮助进行系统修复、升级和配置变更。1.进入维护模式可以通过GRUB菜单选择或使用命令“sudosystemctlisolaterescue.target”。2.在维护模式下,可以执行文件系统修复和系统更新等操作。3.高级用法包括重置root密码等任务。4.常见错误如无法进入维护模式或挂载文件系统,可通过检查GRUB配置和使用fsck命令修复。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

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

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

禅工作室 13.0.1
功能强大的PHP集成开发环境

Atom编辑器mac版下载
最流行的的开源编辑器

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器