菜鸟科技网

linux命令 e

-e 是一个非常常见且重要的命令行选项,它的全称是 --exist--exists,核心含义是 “检查(文件或目录)是否存在”

linux命令 e-图1
(图片来源网络,侵删)

-e 并不是一个独立的命令,而是一个测试条件,它几乎总是与以下两个结构一起使用:

  1. test 命令
  2. if 条件语句(在 shell 脚本中)

下面我们分情况来详细说明。


test 命令中使用

test 命令用于检查某个条件是否成立,当 -etest 一起使用时,它会检查指定的路径是否存在。

语法

test -e <文件或目录路径>

或者使用等效的方括号 [](在 shell 脚本中更常见):

linux命令 e-图2
(图片来源网络,侵删)
[ -e <文件或目录路径> ]

工作原理

  • 如果指定的文件或目录存在test 命令的退出码为 0(表示成功/真)。
  • 如果指定的文件或目录不存在test 命令的退出码为非 0(表示失败/假)。

你可以通过检查 echo $? 的输出来查看上一个命令的退出码。

示例

假设我们有一个文件 myfile.txt

文件存在

touch myfile.txt  # 创建一个空文件
[ -e myfile.txt ] # 检查文件是否存在
echo $?           # 输出上一个命令的退出码

输出:

linux命令 e-图3
(图片来源网络,侵删)
0

因为文件存在,所以条件为真,[ -e ... ] 返回 0。

文件不存在

rm myfile.txt     # 删除文件
[ -e myfile.txt ] # 再次检查
echo $?           # 查看退出码

输出:

1

因为文件不存在,所以条件为假,[ -e ... ] 返回非 0(这里是 1)。


if 条件语句(Shell 脚本)中使用

这是 -e 选项最常用和最强大的地方,我们通常在 if 语句中用它来判断文件是否存在,然后决定后续的操作。

语法

if [ -e <文件或目录路径> ]; then
    # 如果文件/目录存在,执行这里的命令
    echo "文件/目录存在!"
else
    # 如果文件/目录不存在,执行这里的命令
    echo "文件/目录不存在!"
fi

重要提示: if 语句和 [ ] 之间必须有空格,[ 后面和 ] 前面也必须有空格,否则会报错。

示例

一个简单的 shell 脚本 check_file.sh

#!/bin/bash
# 定义要检查的文件路径
FILE="/etc/passwd"
if [ -e "$FILE" ]; then
    echo "成功: 文件 $FILE 存在。"
    # 你可以在这里添加更多操作,比如读取文件内容
else
    echo "错误: 文件 $FILE 不存在!"
fi
# 检查一个不存在的文件
NON_EXISTENT_FILE="/tmp/non_existent_file.log"
if [ -e "$NON_EXISTENT_FILE" ]; then
    echo "文件 $NON_EXISTENT_FILE 存在。"
else
    echo "文件 $NON_EXISTENT_FILE 不存在。"
fi

运行脚本:

chmod +x check_file.sh  # 给脚本执行权限
./check_file.sh

输出:

成功: 文件 /etc/passwd 存在。
文件 /tmp/non_existent_file.log 不存在。

test 命令中的其他常见选项

-etest 命令众多选项中的一个,了解其他几个常用的选项会非常有帮助。

选项 全称 描述 示例
-e --exist 检查文件或目录是否存在 (最常用) [ -e /etc/hosts ]
-f --file 检查是否为普通文件 (不是目录、设备等) [ -f /etc/hosts ]
-d --directory 检查是否为目录 [ -d /tmp ]
-s --size 检查文件大小是否大于 0 (非空) [ -s /var/log/syslog ]
-r --readable 检查当前用户是否可读 [ -r /etc/passwd ]
-w --writable 检查当前用户是否可写 [ -w /tmp/myfile.txt ]
-x --executable 检查当前用户是否可执行 [ -x /usr/bin/ls ]
-z --zero 检查字符串长度是否为 0 (空字符串) [ -z "$MY_VAR" ]
-n --nonzero 检查字符串长度是否不为 0 (非空字符串) [ -n "$MY_VAR" ]

test 选项组合示例

你可以使用逻辑运算符组合这些测试:

  • -a&& (逻辑与)
  • -o 或 (逻辑或)

示例:检查文件是否存在且可读

FILE="/etc/hosts"
if [ -e "$FILE" -a -r "$FILE" ]; then
    echo "文件 $FILE 存在且可读。"
fi
# 使用 && (更推荐)
if [ -e "$FILE" ] && [ -r "$FILE" ]; then
    echo "文件 $FILE 存在且可读。"
fi

特性 描述
核心功能 检查一个文件或目录路径是否存在。
使用场景 主要与 test 命令和 if 条件语句结合使用,尤其是在 shell 脚本中进行流程控制。
返回值 如果存在,返回 0 (真);如果不存在,返回非 0 (假)。
与其他选项的区别 -e 检查任何类型的文件或目录;-f 检查普通文件;-d 检查目录。
最佳实践 在 shell 脚本中,始终将变量名用双引号括起来,如 [ -e "$FILE" ],以防止变量为空时出错。

-e 是一个“条件判断工具”,而不是一个独立的“动作命令”,它的价值在于根据判断结果来决定下一步该做什么。

分享:
扫描分享到社交APP
上一篇
下一篇