Linux shell脚本中多命令的 ; && || 连接符号用法


连接 ;

command1;command2;command3;...
仅作为分割命令用法,前面命令执行的成功与否,不影响后续命令执行。

与 &&

command1 && command2 && command3 && ...
与,串接后从左到右执行,左边的命令执行成功后,才会继续执行右边的命令。

或 ||

command1 || command2 || command3 || ...
或,串接后从左到右执行,左边的命令执行失败后,才会继续执行右边的命令。

换行 \

command2 && \
command3 && ...

太长了,写不下,可以换行继续。

举例

mypc@mypc-u2004:~/workspace/c$ ls

这是一个空的文件夹。

mypc@mypc-u2004:~/workspace/c$ cat a;cat b;cat c;
cat: a: No such file or directory
cat: b: No such file or directory
cat: c: No such file or directory

从左到右执行,没有任何关联,所以会进行三次cat动作,都显示没有找到。

mypc@mypc-u2004:~/workspace/c$ cat a&&cat b; cat c;
cat: a: No such file or directory
cat: c: No such file or directory

从左到右执行,因为a命令执行失败,所以不执行b命令,接着执行cat c。

mypc@mypc-u2004:~/workspace/c$ cat a&&cat b&&cat c;
cat: a: No such file or directory

对比,这次只执行了cat a。

mypc@mypc-u2004:~/workspace/c$ cat a||cat b&&cat c;
cat: a: No such file or directory
cat: b: No such file or directory
mypc@mypc-u2004:~/workspace/c$ cat a||cat b;cat c;
cat: a: No such file or directory
cat: b: No such file or directory
cat: c: No such file or directory

或,执行失败后才会执行后续语句,所以cat a失败,执行cat b失败,&&后的cat c不执行,但;后的cat c执行。

mypc@mypc-u2004:~/workspace/c$ touch a
mypc@mypc-u2004:~/workspace/c$ cat a||cat b&&cat c;
cat: c: No such file or directory
mypc@mypc-u2004:~/workspace/c$ cat a||cat b;cat c;
cat: c: No such file or directory

创建一个a文件,
或,执行失败后才会执行后续语句,所以cat a成功,不执行cat b,同时左边执行成功,故&&后的cat c执行,;后的cat c与左边逻辑无关,继续执行。