0Pricing
DevOps Bootcamp · 课时

错误处理与退出状态

通过理解退出状态并使用“set -e”和条件逻辑,在脚本中实现可靠的错误检查。

错误处理与退出状态 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

欢迎学习错误处理

在本课中,您将学习如何有效处理错误,从而让 Bash 脚本更加健壮。

想象一下,一个脚本需要执行许多步骤。如果其中一步失败,您肯定希望脚本停止,或者至少知道发生了失败,对吧?这就是错误处理的作用!

什么是退出状态?

您在 Linux shell 中运行的每条命令都会返回一个退出状态(有时也称为退出代码或返回代码)。

  • 状态为 0 表示命令成功完成。
  • 非零状态(例如 1、2、127)表示发生了某种失败或错误。

它就像命令的交通信号灯!

手动检查退出状态

您可以使用特殊变量 $? 检查上一条执行的命令的退出状态。

让我们分别尝试一条成功的命令和一条失败的命令:

#!/bin/bash

echo "Hello CoddyKit"
echo "Exit status: $?"

ls non_existent_file.txt
echo "Exit status: $?"

基本条件错误检查

了解退出状态后,脚本就可以据此做出决策。您可以使用 if 语句检查 $?,并对错误做出响应。

这样,脚本就能感知问题,并避免继续处理无效数据。

#!/bin/bash

ls non_existent_file.txt

if [ $? -ne 0 ]; then
  echo "Error: The 'ls' command failed!"
  exit 1 # Exit script with an error code
fi

echo "This line will not run if 'ls' fails."

`set -e` 的作用

每条命令之后都手动检查 $? 可能很麻烦。这正是 set -e 派上用场的地方!

当您使用 set -e 启动脚本时,如果任何命令(不属于条件测试的命令)以非零状态退出,Bash 就会立即退出。

它就像脚本的全局安全开关!

`set -e` 的实际效果

让我们看看 set -e 如何阻止脚本在发生错误后继续执行。请注意,最后的 echo 命令根本不会执行。

#!/bin/bash
set -e

echo "Starting important tasks..."

# This command will fail
cp /non_existent_source /tmp/destination

echo "This line will NOT be printed if 'cp' fails."
echo "All tasks completed successfully."

`set -e` 不会停止执行的情况

set -e 功能强大,但有一些特定规则。如果失败的命令属于以下情况,它不会导致脚本退出:

  • 属于 if 或 while 条件。
  • 属于 && 或 || 列表(最后一条命令除外)。
  • 前面有 !。

这些上下文用于测试成功或失败,因此 `set -e` 不会干扰它们。

将 `set -e` 与 `||` 结合使用

有时,您希望在退出前显示自定义错误消息。您可以将 set -e 与 ||(OR)运算符结合使用。

command || { echo "Error message"; exit 1; }

如果 command 执行失败,|| 后面的部分就会执行,打印您的消息,然后以指定的错误代码退出。

#!/bin/bash
set -e

echo "Attempting to find a file..."

find /non_existent_dir -name "*.txt" || \
  { echo "ERROR: Could not search in /non_existent_dir!"; exit 1; }

echo "Script continued (this won't print if 'find' fails)."

处理特定退出代码

0 表示成功,非零值表示失败,但不同的非零代码可能代表不同的含义。

  • 1:一般错误。
  • 2:shell 内置命令使用不当。
  • 127:找不到命令。

您可以使用 if [ $? -eq 127 ] 检查特定的失败类型,从而提供更有针对性的错误反馈。

错误处理测验

以下关于 Bash 退出状态和错误处理的说法中,哪一项是 TRUE?

回顾:健壮的脚本

您已经学会了如何让 Bash 脚本更加可靠!

  • 每条命令都会返回一个退出状态(成功时为 0,失败时为非零值)。
  • $? 变量会提供上一条命令的退出状态。
  • set -e 是一个强大的工具,可以在大多数命令失败时自动退出脚本。
  • 将 set -e 与 || 结合使用,可以显示自定义错误消息。

使用这些技术将帮助您编写更专业、更稳定的脚本。

常见问题解答

「错误处理与退出状态」课时是免费的吗?

是的 — 「错误处理与退出状态」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「错误处理与退出状态」这节课中我会学到什么?

通过理解退出状态并使用“set -e”和条件逻辑,在脚本中实现可靠的错误检查。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「错误处理与退出状态」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 调试 Bash 脚本(set -x、trap)
  2. 错误处理与退出状态
  3. 脚本编写最佳实践与代码检查
  4. 使用 Bats 测试 Bash 脚本
← 返回 DevOps Bootcamp