Shell脚本中多命令逻辑执行顺序的方法详解脚本中多命令逻辑执行顺序的方法详解
Linux中可以使用分号“;”、双and号“&&”和双竖线“||”来连接多个命令。单”&”符号也算命令连接符号,只不过它是将其前面的命
令放入后台执行,所以可以变相地实现命令并行执行。
1.分号分号”;”
command1 ; command2
命令之间没有逻辑关系。分号连接的命令会按照顺序从前向后依次执行,但分号两端的命令之间没有任何逻辑关系,所有写出
来的命令最终都会被执行,即使分号前面的命令出错也不影响后面的命令。
[root@xuexi ~]# ls das;echo "hdakl"
ls: cannot access das: No such file or directory
hdakl
2.&&
command1 && command2
逻辑与。&&连接的命令会按照顺序从前向后执行,但只有当command1正确执行才执行command2,如果command1不正确
执行,则不执行command2。在bash中,通过预定义变量“$?”来判断命令是否正确执行,如果”$?”的值为0则表示前一条命令
正确执行,其他任意值都表示不正确执行。\
[root@xuexi ~]# echo "hdakl" && ls ds
hdakl
ls: cannot access ds: No such file or directory
[root@xuexi ~]# ls das && echo "hdakl"
ls: cannot access das: No such file or directory
3.||
command1 || command2
逻辑或。||连接的命令会按照顺序从前向后执行,但只有当command1不正确执行才执行command2,command1正确执行则
不会执行command2。||和&&都是短路符号,符号左右的命令之间具有逻辑关系。
[root@xuexi ~]# ls das || echo "hdakl"
ls: cannot access das: No such file or directory
hdakl
[root@xuexi ~]# echo "hdakl" || ls ds
hdakl
一般要联合使用&&和||的时候,基本上都会先逻辑与再逻辑或:command1 && command2 || command3。因为在实际
中,command2和command3应该都是想要执行的命令。如果command1正确执行,$?就等于0,执行command2,再看情况
执行command3,如果command1错误执行,$?就不等于0,所以不执行command2,根据$?为非0值,判断了 || 右边的命令
应该被执行。
通俗点的理解方法是根据语义判断。“如果…就…否则…就…”的语句使用“cmd1 && cmd2 || cmd3”,“如果不…就…否则…
就…”使用“!cmd1 && cmd2 || cmd3”。
例如,如果用户user1存在,就显示用户已经存在,否则,就添加此用户。
[root@xuexi tmp]# id user1 && echo "user1 exists" || useradd user1
如果用户user2不存在,则添加此用户,否则显示用户已存在。
[root@xuexi tmp]# !id user2 && useradd user2 || echo "user2 exists"
如果用户user3不存在,则添加此用户,并设定其密码为用户名本身,否则显示用户已存在。
[root@xuexi tmp]# !id user3 && useradd user3 && echo "user3" | passwd --stdin user3 || echo "user3 exists"
4.&
command1 &
command1 & command2
评论10