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

-e 并不是一个独立的命令,而是一个测试条件,它几乎总是与以下两个结构一起使用:
test命令if条件语句(在 shell 脚本中)
下面我们分情况来详细说明。
在 test 命令中使用
test 命令用于检查某个条件是否成立,当 -e 与 test 一起使用时,它会检查指定的路径是否存在。
语法
test -e <文件或目录路径>
或者使用等效的方括号 [](在 shell 脚本中更常见):

[ -e <文件或目录路径> ]
工作原理
- 如果指定的文件或目录存在,
test命令的退出码为 0(表示成功/真)。 - 如果指定的文件或目录不存在,
test命令的退出码为非 0(表示失败/假)。
你可以通过检查 echo $? 的输出来查看上一个命令的退出码。
示例
假设我们有一个文件 myfile.txt。
文件存在
touch myfile.txt # 创建一个空文件 [ -e myfile.txt ] # 检查文件是否存在 echo $? # 输出上一个命令的退出码
输出:

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 命令中的其他常见选项
-e 是 test 命令众多选项中的一个,了解其他几个常用的选项会非常有帮助。
| 选项 | 全称 | 描述 | 示例 |
|---|---|---|---|
-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 是一个“条件判断工具”,而不是一个独立的“动作命令”,它的价值在于根据判断结果来决定下一步该做什么。
