最稳妥的防错方式是用if配合test操作符先判断再操作:-d检查目录存在性后创建,-f/-s检查文件存在及非空,多条件用&&连接,注意空格、引号和换行符规范。

直接用 if 配合测试操作符(test operators)判断文件或目录是否存在,是最稳妥、最常用的防错方式。关键不是“先试再错”,而是“先查再动”——避免命令因目标不存在而失败或产生意外行为。
判断目录是否存在并创建
用 -d 检查是否为有效目录。不存在时才创建,避免重复报错或覆盖已有内容:
if [ ! -d "/path/to/dir" ]; then mkdir -p "/path/to/dir"; fi-
mkdir -p自带容错,但加if判断更清晰,便于后续插入日志或权限设置 - 注意:
[和]前后必须有空格,变量建议用双引号包裹,如"$DIR"
判断文件是否存在并初始化
用 -f 确认是普通文件;搭配 touch 或 cp 可安全初始化配置文件或日志:
if [ ! -f "/etc/myapp.conf" ]; then cp /usr/share/myapp/default.conf /etc/myapp.conf; fi- 想确认非空文件?可用
-s(存在且大小 > 0),比-f更严格 - 不要只依赖
touch:它会更新时间戳,若仅需“存在即跳过”,-f+if更精准
组合权限与存在性检查
单靠存在性不够,有时还需读/写/执行权限。多个条件可用 && 连接:
if [ -f "/usr/local/bin/script.sh" ] && [ -x "/usr/local/bin/script.sh" ]; then /usr/local/bin/script.sh; fi-
[ -r "$file" ] && [ -s "$file" ]可确保文件存在、可读且非空,适合做数据处理前校验 - 注意:
&&是逻辑与,两个条件都为真整个表达式才为真;任一失败则跳过执行体
避免常见语法坑
看似简单,但空格、引号、换行符出错会导致脚本静默失败或报错:
-
[后、]前必须有空格,if [ -f $file ]错,应为if [ -f "$file" ] - 路径含空格或特殊字符时,不加引号会拆分参数,导致判断失效
- Windows 编辑的脚本可能带
\r\n换行,bash 无法识别]后的\r,建议用dos2unix或 Notepad++ 转换











