在执行某个命令的时候,有时需要依赖于前一个命令是否执行成功。例如,假设你希望将一个目录中的文件全部拷贝到另外一个目录中后,然后删除源目录中的全部文件。在删除之前,你希望能够确信拷贝成功,否则就有可能丢失文件
在本文中,我们将讨论:
-
命令执行控制。
-
命令组合。
&&的使用:
&&就可以解决上面背景说的问题。前面指令执行成功才执行后面的指令。
使用语法:
命令1&&命令2
相当于逻辑与操作:
condition1 && condition2
只有当condition1为True,才会判断得出condition2
示例:
要求:拷贝 /tmp/nginx.conf 到 /etc/nginx/nginx.conf 后把/tmp/nginx.conf删除
cp /tmp/nginx.conf /etc/nginx/nginx.conf&&rm -rf /tmp/nginx.conf
||的使用:
||的意思是,当||前面的命令执行成功就不执行||后面的命令
使用语法:
命令1||命令2
逻辑或的思维。
示例:
要求:拷贝 /tmp/nginx.conf 到 /etc/nginx/nginx.conf 否则把/tmp/nginx.conf 拷贝到 /usr/nginx/nginx.conf
cp /tmp/nginx.conf /etc/nginx/nginx.conf||cp /tmp/nginx.conf /usr/nginx/nginx.conf
为了在当前s h e l l中执行一组命令,可以用命令分隔符隔开每一个命令,并把所有的命令 用圆括号()括起来。
语法:
(命令1;命令2;. . .)
示例:当失败了,发邮件给自己然后退出
[root@localhost shell_protest]# cat co.sh
#!/bin/bash
false||echo "it is fail"|mail nick&&exit
#特例:当失败了,发邮件也失败了,就退出不了程序了
false||echo "it is fail"|mail nick||exit
#特例:当失败了,发邮件也成功了,但退出不了程序了
false||(echo "it is fail"|mail nick;exit)
#所以,使用()来组合命令,是一种不错的选择
总结:
在编写shell脚本时,使用&&和||对构造判断语句非常有用。如果希望在前一个命令执行失败的情况不执行后面的命令,那么本文所讲述的方法非常简单有效。使用这样的方法,可以根据&&或||前面命令的返回值来控制其后面命令的执行。