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 增强可读性。

相关推荐
吴声子夜歌8 天前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
吴声子夜歌10 天前
Shell编程实例——内务及管理任务(一)
linux·运维·shell
吴声子夜歌10 天前
Shell编程实例——高级脚本编程(一)
linux·运维·网络·shell
吴声子夜歌10 天前
Shell编程实例——bash的配置与自定义(二)
linux·运维·shell
吴声子夜歌11 天前
Shell编程实例——与解析相关的任务(二)
linux·运维·shell
吴声子夜歌11 天前
Shell编程实例——脚本编程的附加特性
linux·运维·shell
云计算练习生11 天前
什么是内核?操作系统内核到底管哪些事
linux·windows·操作系统·内核·shell
吴声子夜歌14 天前
Shell编程实例——bash入门
linux·运维·shell
Swizard14 天前
Linux 日志神器 journalctl 完全指南:彻底替代传统日志查看方式
shell
吴声子夜歌15 天前
Shell编程——数组
linux·运维·shell