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中的逻辑运算符, 也是短路逻辑.