Shell退出状态

每一条Shell命令, 不管是Bash内置命令, 还是外部的Linux命令, 还是自定义的Shell函数, 当它退出(结束运行)时, 都会返回一个较小的整数值(0~255), 这就是命令的退出状态(exit status).

if语句的判断条件, 从本质上将, 判断的就是命令的退出状态.

注解

条件语句和循环语句中的判断条件, 都是判断命令的退出状态.

所以判断条件不能是一个值, 必须是一个命令, 判断命令退出状态.

按照惯例来说, 退出状态为0表示”成功”, 也就是说, 程序执行完成并且没有遇到任何问题. 除0以外的其它任何退出状态都为”失败”.

注意

Shell的这个部分与其它编程语言正好相反: 在C/C++, Python中, 0表示”假”, 1表示”真”.

在Shell中, 有多种方式取得命令的退出状态, 其中$?是最常见的一种.

退出状态和逻辑运算符的组合

Shell if语句允许我们使用逻辑运算符将多个退出状态组合起来, 这样就可以一次判断多个条件了.

运算符 使用格式 说明
&& expr1 && expr2

逻辑与运算符

当expr1和expr2都成立时, 整个表达式才成立.

如果检测到expr1的退出状态为非0, 就不会再检测expr2了,

因为不管expr2的退出状态是什么, 整个表达式都是不成立的.

|| expr1 || expr2

逻辑或运算符

expr1和expr2两个表达式中只要有一个成立, 整个表达式就成立.

如果检测到expr1的退出状态为0, 就不会再检测expr2了,

因为不管expr2的退出状态是什么, 整个表达式必然都是成立的.

! !expr 逻辑非运算符.

注解

Shell中的逻辑运算符, 也是短路逻辑.