不同的命令可以按照不同的方式组合起来,实现更多的功能,如前面我们已经接触过的管道。除了管道符(|),Shell的命令组合符还有分号(;)、逻辑与(&&)和逻辑或(||)。这些命令组合符可分为两类:无条件命令组合符(管道符和分号)和条件命令组合符(&&、||)。
分类 名称 符号 作用 无条件命令组合符 管道符 | 把前一个命令的输出作为后一个命令的输入 分号 ; 依次执行命令 条件命令组合符 逻辑与 && 前一个命令执行成功再执行后一个命令 逻辑或 || 前一个命令执行不成功再执行后一个命令
1. 无条件命令组合符
管道符和分号连接的两个命令无论前一个命令执行成功与否,都执行后一个命令,因此我们称这两种Shell特殊符号为无条件命令组合符。其中的管道符我们在前面的管道一节中已经学过。分号的作用与Shell脚本中的换行类似,其连接的命令按顺序依次执行。
[peter@ibi-genome shell]$ whoami peter [peter@ibi-genome shell]$ date 2017年 04月 30日 星期日 15:31:13 CST [peter@ibi-genome shell]$ whoami;date peter 2017年 04月 30日 星期日 15:31:23 CST
2. 条件命令组合符
&&和||要根据前一个命令的执行结果决定是否执行后一个命令,因此我们称这两种命令组合符为条件命令组合符。我们先看一个逻辑与的例子:
[peter@ibi-genome shell]$ ls animal plant [peter@ibi-genome shell]$ test -f plant && rm -f plant [peter@ibi-genome shell]$ ls animal
如果前一个命令执行成功,test命令的返回值等于0,也就是如果当前目录下存在plant文件,就执行后一个命令,即删除该文件。如果当前目录下不存在plant文件,第一个命令的返回值大于0,后一个命令也不会执行。
下面是一个逻辑或的例子:
[peter@ibi-genome shell]$ ls animal [peter@ibi-genome shell]$ test -d plant || mkdir plant [peter@ibi-genome shell]$ ls animal plant
命令执行前当前目录下只有animal目录,没有plant目录,test -d plant返回值大于0,所以执行||后面的命令mkdir plant,即创建plant目录。
有这几种命令组合符,即使不用我们后面要学习的控制结构,也可以实现复杂的功能,而且代码更简洁,效率更高。