命令的退出状态(exit statu)是指执行完Linux命令或shell函数后,该命令或函数返回给调用它的程序的一个比较小的整数值。if 语句的判断条件,从本质上讲,判断的就是命令的退出状态。
按照惯例来说,退出状态为 0 表示“成功”;也就是说,程序执行完成并且没有遇到任何问题。除 0 以外的其它任何退出状态都为“失败”。但也会有例外,比如 diff 命令用来比较两个文件的不同,对于“没有差别”的文件返回 0,对于“找到差别”的文件返回 1,对无效文件名返回 2。而在其他编程语言(C、Python等)中,0 表示“假”,其它值表示“真”。
最常用与获取命令退出状态的方式是$?
退出状态和逻辑运算符的组合
Shell if 语句允许使用逻辑运算符将多个退出状态组合起来,这样可以一次判断多个条件了。
Shell 逻辑运算符
运算符 | 使用格式 | 说明 |
---|---|---|
&& 逻辑与 |
expression1 && expression2 |
当 expression1 和 expression2 同时成立时,整个表达式才成立。 如果检测到 expression1 的退出状态为 1,就不会再检测 expression2 了,因为不管 expression2 的退出状态是什么,整个表达式必然都是不成立的,检测了也是多此一举。 |
|| |
expression1 || expression2 | expression1 和 expression2 两个表达式中只要有一个成立,整个表达式就成立。 如果检测到 expression1 的退出状态为 0,就不会再检测 expression2 了,因为不管 expression2 的退出状态是什么,整个表达式必然都是成立的,检测了也是多此一举。 |
! 逻辑非 | !expression |
相当于“取反”的效果。如果 expression 成立,那么整个表达式就不成立; 如果 expression 不成立,那么整个表达式就成立。 |
举栗
作用 | 脚本 | 结果 | 知识点 |
---|---|---|---|
将用户输入的 URL 写入到文件中 |
|
运行结果为: urls.txt↙ http://c.biancheng.net/shell/↙ 写入成功 |
test 是 Shell 内置命令,可以对文件或者字符串进行检测。 其中, |