7.Shell
7.5.2命令执行的判断依据: ; , &&, ||
1.cmd ; cmd (不考虑指令相关性的连续指令下达)
一般用于多条命令之间没有直接需求联系,最多只是有一个执行先后的关系。
[root@localhost tmp]# sync; shutdown -h now
2.与&&或 ||指令下达情况说明
cmd1 && cmd21.若 cmd1 执行完毕且正确执行($?=0),则开始执行 cmd2。
2.若 cmd1 执行完毕且为错误 ($?≠0),则 cmd2 不执行。
cmd1 || cmd21.若 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的执行过程如下: