Linux Shell基础 多个命令中的分号(;)、与(&&) 、 或(||)

概述

在 Bash 中,如果需要让多条命令按顺序执行,则有这样方法,如表 1 所示。

多命令执行符 格 式 作 用 ; 命令1 ; 命令2 多条命令顺序执行,命令之间没有任何逻辑关系 && 命令1 && 命令2 如果命令1正确执行($?=0),则命令2才会执行如果命令1执行不正确($?≠0),则命令2不会执行 II 命令1 || 命令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"

 

243人参与, 0条评论 登录后显示评论回复

你需要登录后才能评论 登录/ 注册