目录
[TOC]
表格
多命令执行符 | 格 式 | 作 用 |
---|---|---|
; | 命令1 ; 命令2 | 多条命令顺序执行,命令之间没有任何逻辑关系 |
&& | 命令1 && 命令2 | 如果命令1正确执行($?=0),则命令2才会执行;如果命令1执行不正确($?≠0),则命令2不会执行 |
II | 命令1 II 命令2 | 如果命令1执行不正确($?≠0),则命令2才会执行; 如果命令1正确执行($?=0),则命令2不会执行 |
;
多命令顺序执行
如果使用分号;
连接多条命令,那么这些命令会一次执行,但是各命令之间没有任何逻辑关系,不论哪条命令报错了,后面的命令仍会依次执行。例如:
cd /user
命令出错不影响其他命令的执行,所以当我们需要一次执行多条命令,而这些命令之间又没有可逻辑关系时,就可以使用";"来连接多条命令。
[root@localhost ~]# ls ; date; cd /user; pwd
anaconda-ks.cfg
Tue Nov 20 20:59:42 CST 2018
-bash: cd: /user: No such file or directory
/root
&&
逻辑与
如果使用&&
连接多条命令,那么只有第一条命令正确执行了,&&
连接的第二条命令才会执行。在Bash中通过预定义变量 $?
来判断上一条命令是是否执行成功,如果 $?
返回值是 0
,则证明上一条命令正确执行;如果 $?
返回值是非 0
,则证明上一条命令执行错误。
例如: 复制/root/test
到/tmp/test
,如果命令成功则删除原文件,并打印yes
。在执行过程中,因为没有test
这个文件或目录,所以cp
命令无法获取/root/test
的文件状态(stat),,所以第一条命令执行不正确,第二和第三条命令也都不执行了。
[root@localhost ~]# cp /root/test /tmp/test && rm -rf/ root/test && echo yes
通常在安装源码包时,需要执行./configure
、make
和make install
命令,但是在安装软件时又需要等待较长时间,则可以利用&&
同时执行这三条命令,例如
[root@localhost ~]# cd httpd-2.2.9
[root@localhost httpd-2.2.9]# ./configure --prefix=/usr/ local/apache2 && make && make install
||
逻辑或
如果使用||
连接多条命令,则只有前一条命令执行错误,后一条命令才能执行。
例如:因为无法访问/root/test
:没有那个文件或目录,所以用ls
命令查看时报错了。因为第一条命令执行错误,所以第二条命令才正确执行
[root@localhost ~]#ls /root/test || mkdir/root/tdir
在脚本中如果我们想要判断某条命令是否正确执行,就可以使用下面命令:
因为/root/test
文件不存在,第一条命令报错,则第二条命令不能正确执行,因为第二条命令执行错误,所以第三条命令正确执行,打印no
[root@localhost ~]#ls /root/test && echo "yes"||echo "no"