• 退出状态和逻辑运算符的组合
  • Shell 逻辑运算符
  • 举栗

命令的退出状态(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 写入到文件中

  1. #!/bin/bash
  2. read filename
  3. read url
  4. if test -w $filename && test -n $url
  5. then
  6. echo $url > $filename
  7. echo "写入成功"
  8. else
  9. echo "写入失败"
  10. fi

运行结果为:

urls.txt↙

http://c.biancheng.net/shell/↙写入成功

test 是 Shell 内置命令,可以对文件或者字符串进行检测。

其中,-w选项用来检测文件是否存在并且可写,-n选项用来检测字符串是否非空。