ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

bash中||与的区别

2026/8/8 17:58:12 拓冰建站 浏览量
bash中||与的区别

在 Bash 中,||&& 是两种常用的逻辑操作符,用于控制命令的执行流程。它们的核心区别如下:


1. ||(逻辑 OR)

  • 作用:如果前一个命令失败(返回非零退出码),则执行后一个命令。
  • 记忆口诀|| 像"否则"(前面的失败了,就执行后面的)。
  • 示例
    [ -d "/backup" ] || mkdir -p "/backup"
    
    • 如果 /backup 不存在[ -d ] 返回非零),则执行 mkdir -p
    • 如果 /backup 已存在[ -d ] 返回零),跳过 mkdir

2. &&(逻辑 AND)

  • 作用:如果前一个命令成功(返回零退出码),则执行后一个命令。
  • 记忆口诀&& 像"而且"(前面的成功了,才执行后面的)。
  • 示例
    [ -f "/data/file.txt" ] && rm "/data/file.txt"
    
    • 如果 /data/file.txt 存在[ -f ] 返回零),则删除它。
    • 如果文件不存在[ -f ] 返回非零),跳过 rm

对比表格

操作符名称执行条件典型用途类比编程语言
``逻辑 OR前一个命令失败时执行
&&逻辑 AND前一个命令成功时执行条件执行、链式操作if (cmd)

实际应用场景

场景 1:依赖前序命令成功
# 只有 cd 成功时,才执行后续操作
cd "/project" && ./build.sh
场景 2:错误恢复
# 如果 ping 失败,尝试 curl 检测网络
ping -c1 google.com || curl -s ifconfig.me
场景 3:组合使用
# 如果目录不存在则创建,且只有创建成功时才写入文件
[ -d "/log" ] || mkdir "/log" && echo "Log started" >> "/log/app.log"

注意事项

  1. 退出码决定流程

    • 命令的退出码 0 表示成功,非 0 表示失败。
    • 可通过 $? 查看上一个命令的退出码:
      ls /nonexistent
      echo $?  # 输出 2(表示失败)
      
  2. ; 的区别

    • cmd1 ; cmd2:无论 cmd1 是否成功,都会执行 cmd2
    • cmd1 && cmd2:只有 cmd1 成功时才执行 cmd2
  3. 避免过度嵌套

    # 难以阅读的写法
    [ -f file ] && grep "pattern" file || echo "Not found"# 更清晰的写法
    if [ -f file ]; thengrep "pattern" file
    elseecho "Not found"
    fi
    

经典用例

1. 快速条件判断
# 只有是 root 用户时才执行操作
[ "$(id -u)" -eq 0 ] && echo "Running as root" || echo "Need root"
2. 链式检查
# 检查依赖命令是否存在
command -v git &>/dev/null && \command -v docker &>/dev/null && \echo "All dependencies installed" || \echo "Missing dependencies"
3. 错误处理
# 如果备份失败,记录日志并退出
tar -czf backup.tar.gz /data || {echo "[ERROR] Backup failed" >> /var/log/backup.logexit 1
}

掌握 ||&& 的区别后,可以显著提升脚本的简洁性和健壮性。