7.Shell本章同步视频:https://edu.51cto.com/sd/e4874

7.5.2 命令执行的判断依据: ; , &&, ||

1.cmd ; cmd (不考虑指令相关性的连续指令下达)

一般用于多条命令之间没有直接需求联系,最多只是有一个执行先后的关系。

[root@localhost tmp]# sync; shutdown -h now

2.与&&或 ||

指令下达情况

说明

cmd1 && cmd2

1. 若 cmd1 执行完毕且正确执行($?=0),则开始执行 cmd2。

2. 若 cmd1 执行完毕且为错误 ($?≠0),则 cmd2 不执行。

cmd1 || cmd2

1. 若 cmd1 执行完毕且正确执行($?=0),则 cmd2 不执行。

2. 若 cmd1 执行完毕且为错误 ($?≠0),则开始执行 cmd2。

[root@localhost tmp]# ls /tmp/abc && touch /tmp/abc/hehe

ls: cannot access /tmp/abc: No such file or directory

[root@localhost tmp]# ls

aaa  stderr  stdout

#测试 /tmp/abc是否存在,若存在则用 touch 建立 /tmp/abc/hehe

[root@localhost tmp]# ls /tmp/abc || mkdir /tmp/abc

ls: cannot access /tmp/abc: No such file or directory

[root@localhost tmp]# ls

aaa  abc  stderr  stdout

#测试 /tmp/abc是否存在,若不存在则予以建立,若存在就不作任何事情

[root@localhost tmp]# ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe

[root@localhost tmp]# ls abc/

hehe

#我不清楚 /tmp/abc是否存在,但就是要建立 /tmp/abc/hehe档案

(1)命令返回值#?

      $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 非0。

[root@localhost tmp]# ls abc/

hehe

[root@localhost tmp]# echo $?

0

[root@localhost tmp]# ls aaaaa

ls: cannot access aaaaa: No such file or directory

[root@localhost tmp]# echo $?

2

(2)&&与||的执行过程

 command1 && command2

      &&左边的command1执行成功(返回0表示成功)后,&&右边的command2才能被执行。

command1 || command2

      如果||左边的command1执行失败(返回非0表示失败),就执行&&右边的command2,否则command2不会被执行。

#分析ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe的执行过程如下:

Linux-shell-逻辑运算和;_||

本章同步视频:https://edu.51cto.com/sd/e4874