... Bourne shell 中存在一些阴暗的角落,人们会使用所有这些角落。 --Chet Ramey |
exit 命令终止脚本,就像在 C 程序中一样。它也可以返回一个值,该值可供脚本的父进程使用。
每个命令都会返回一个 退出状态 (有时称为 返回状态 或 退出码 )。 成功的命令返回 0,而不成功的命令返回 非零 值,该值通常可以解释为 错误代码 。行为良好的 UNIX 命令、程序和实用程序在成功完成时返回 0 退出码,尽管也有一些例外。
同样,脚本内的 函数 和脚本本身也会返回退出状态。函数或脚本中执行的最后一个命令决定了退出状态。在脚本中,一个exitnnn命令可以用于向 shell 传递 nnn 退出状态(nnn 必须是 0 - 255 范围内的整数)。
![]() | 当脚本以没有参数的 exit 结尾时,脚本的退出状态是脚本中执行的最后一个命令(在 exit 之前)的退出状态。
裸 exit 的等价形式是 exit $? 甚至只是省略 exit。
|
$?读取最后执行的命令的退出状态。函数返回后,$?给出函数中最后执行的命令的退出状态。这是 Bash 为函数提供 “返回值” 的方式。[1]
在执行 管道 之后,$?给出最后执行的命令的退出状态。
在脚本终止后,来自命令行的一个$?给出脚本的退出状态,即脚本中最后执行的命令,按照惯例,0在成功时为 0,在错误时为 1 - 255 范围内的整数。
示例 6-1. exit / 退出状态
#!/bin/bash echo hello echo $? # Exit status 0 returned because command executed successfully. lskdf # Unrecognized command. echo $? # Non-zero exit status returned -- command failed to execute. echo exit 113 # Will return 113 to shell. # To verify this, type "echo $?" after script terminates. # By convention, an 'exit 0' indicates success, #+ while a non-zero exit value means an error or anomalous condition. # See the "Exit Codes With Special Meanings" appendix. |
$? 特别适用于在脚本中测试命令的结果(参见 示例 16-35 和 示例 16-20)。
![]() | !, 逻辑非 限定符,反转测试或命令的结果,这会影响其 退出状态 。 示例 6-2. 使用 ! 取反条件
|
![]() | 某些退出状态代码具有 保留含义 ,不应在脚本中由用户指定。 |
[1] | 在那些没有 return 终止函数的情况下。 |