Linux Shell命令逻辑运算符&&、||的结合和优先级

先看这样一条指令:test -e /testfile && echo “exist” || echo “Not exist”,用来判断一个文件是否存在并输出结果。当文件存在就输出“exist”,不存在就输出“Not exist”。这条命令用到了&&和||这两个条件运算符。

1.命令执行的判断依据

在Linux下指令与指令中间利用分号 (;) 来隔开,这样一来,分号前的指令执行完后就会立刻接着执行后面的指令了。但是如果我要下达的两个指令是由相关性的,比如前一个指令执行完成后我才能执行后一个指令。或者前一个指令执行失败就执行第二个指令,这时候就需要用到&&和||这两个运算符了。
我们知道在Linux下一个指令执行正确会回传一个返回值0,具体可在一条指令执行完成通过输入echo $?打印上一条指令是否执行结果是否等于0。通过这个返回值就可以判断后续的指令是否要执行。而&&和||的作用如下:

指令 作用
cmd1 && cmd2 1. 若 cmd1 执行完毕且正确执行( ? = 0 ) , 则 开 始 执 行 c m d 2 。 2. 若 c m d 1 执 行 完 毕 且 为 错 误 ( ?=0),则开始执行 cmd2。2. 若 cmd1 执行完毕且为错误 ( ?=0cmd22.cmd1?≠0),则 cmd2 不执行。
cmd1||cmd2 1. 若 cmd1 执行完毕且正确执行( ? = 0 ) , 则 c m d 2 不 执 行 。 2. 若 c m d 1 执 行 完 毕 且 为 错 误 ( ?=0),则 cmd2 不执行。2. 若 cmd1 执行完毕且为错误 ( ?=0cmd22.cmd1?≠0),则开始执行 cmd2。

知道了这两个运算符的作用后就可以根据上一条指令的结果来选择是否执行下一条指令。

&&和||结合使用

像先前说的test -e /testfile && echo “exist” || echo "Not exist"这条指令一样,我们使用需要知道一个文件是否存在并显示结果。
在bash中,&&和||的优先级是一样的,具有相同优先级的运算符是左关联的。即在没有分组结构的情况下,最左边的操作会首先被执行。所以这条指令中&&首先被执行,指令可以解释成这样:
(test -e /testfile && echo “exist”) || echo “Not exist”,
当testfile存在是,(test -e /testfile && echo “exist”)解释成true&&echo “exist”,所以会输出“exist”
而后续的||符号,由于前一个指令已经返回正确值,所以被跳过不执行。

当testfile文件不存在时,(test -e /testfile && echo “exist”)解释成false&&echo “exist”,由于&&前是false,所以不再执行echo “exist”,因而最后指令就变成false||echo “Not exist”,就会输出Not exist。

你可能感兴趣的:(#,鸟哥的Linux私房菜,linux,运维)