Shell脚本中&&和||语法解析

https://www.cnblogs.com/liuyuelinfighting/p/16377705.html

在 Shell 脚本中,&& 和 || 是逻辑操作符 ,用于根据前一个命令的退出状态(成功或失败)决定是否执行后续命令。这种语法称为 命令链(Command Chaining)。

语法解析

bash 复制代码
[ -d student.txt ] && echo yes || echo no
  1. [ -d student.txt ]

    • 这是一个条件测试命令,用于检查 student.txt 是否是一个目录 (-d 参数)。
    • 如果目录存在,返回退出状态 0(成功);否则返回非 0(失败)。
  2. &&(逻辑与)

    • 仅当左侧命令成功时(退出状态为 0),才会执行右侧的命令。

    • 示例:

      bash 复制代码
      [ -d student.txt ] && echo yes

      若目录存在,则执行 echo yes;若不存在,跳过 echo yes。

  3. ||(逻辑或)

    • 仅当左侧命令失败时(退出状态非 0),才会执行右侧的命令。

    • 示例:

      bash 复制代码
      [ -d student.txt ] || echo no

      若目录不存在,则执行 echo no;若存在,跳过 echo no。


组合效果

  • 目录存在时 :
    [ -d student.txt ] 成功 → 执行 && 后的 echo yes → echo yes 成功 → 跳过 || 后的 echo no。

    输出:yes

  • 目录不存在时 :
    [ -d student.txt ] 失败 → 跳过 && 后的 echo yes → 由于左侧整体失败,执行 || 后的 echo no。

    输出:no


等价于 if-else 语句

上述命令链等价于以下 if-else 结构:

bash 复制代码
if [ -d student.txt ]; then
    echo yes
else
    echo no
fi

注意事项

  1. && 和 || 的优先级
    && 的优先级高于 ||,因此命令按以下分组执行:
    ( [ -d student.txt ] && echo yes ) || echo no

  2. 命令退出状态是关键

    • 每个命令的退出状态决定后续操作(0=成功,非0=失败)。
    • 例如,若 echo yes 意外失败(极罕见),也会触发 || echo no。

其他常见用法

bash 复制代码
# 1. 仅当命令成功时执行操作
rm file.txt && echo "删除成功"

# 2. 仅当命令失败时执行操作
cp a.txt b.txt || echo "复制失败"

# 3. 复杂组合(注意括号分组)
make && ( echo "编译成功"; ./app ) || echo "编译失败"

通过命令链可以简洁地实现条件逻辑,但复杂的场景建议使用 if-else 增强可读性。

相关推荐
AnxiangLemon8 天前
Warp Lite :一个专注本地使用的开源终端
终端·shell·warp·warp lite
sbjdhjd11 天前
从污点追踪断点到 PHP-FPM 请求队列:HIDS PHP WebShell 样本复盘
开发语言·网络安全·数据挖掘·渗透测试·开源·php·shell
Shell运维手记14 天前
Shell 结构化命令知识点总结(case、for、while)
运维·microsoft·shell·脚本
云计算练习生14 天前
什么是 Bash?Linux 默认 Shell 的核心功能
linux·操作系统·bash·shell·命令解释器
猫咪很可爱15 天前
MySQL 5.7 备份恢复后函数与存储过程丢失:原因分析与正确备份姿势
数据库·mysql·bug·shell
qetfw16 天前
Linux 文件清理:find、mtime 与安全传参验证
linux·shell·1024程序员节
Lsetea18 天前
curl下载HTTPS文件报23:证书验证成功与本地写入失败分层排查
linux·https·shell·ssl证书·curl
DogDaoDao19 天前
Windows 双 Shell 全面对比:CMD 与 PowerShell 的技术剖析
windows·shell·测试·powershell·cmd·程序员开发
Lsetea20 天前
OpenSSL的checkhost显示不匹配却退出0:名称检查与证书验收
linux·https·shell·ssl证书·openssl
钱栈up23 天前
耳机音效不对,我顺手查了系统更新,结果挖出个崩溃了整天的服务
windows·shell