『忘了再学』Shell基础 — 7、Bash基本功能(多命令顺序执行)
Linux系统支持多条命令顺序执行,就是我可以依次输入多条命令后,统一按Enter键,顺序执行。
1、多命令执行符;
在多个命令之间加;
即可多命令顺序执行。
命令格式:命令1 ; 命令2
说明:
- 多个命令顺序执行,命令之间可以没有任何逻辑联系。
[root@localhost ~]# ls ; date ; cd /etc/ anaconda-ks.cfg install.log install.log.syslog 2020 03月 29日 星期日 05:08:28 CST [root@localhost etc]#
- 不管前面的命令是否正确执行,后面的命令都会执行。
[root@localhost ~]# lswrqwr ; date ; cd /etc/ -bash: lswrqwr: command not found 2020 03月 29日 星期日 05:08:28 CST [root@localhost etc]#
2、多命令执行符&&
&&
又叫逻辑与执行符。
命令格式:命令1 && 命令2
说明:
- 当命令1正确执行($?=0),则命令2才会执行。
- 当命令1执行不正确($?≠0),则命令2不会执行。
- 命令1和命令2之间可以没有任何逻辑联系。
- 练习1:命令1正确执行。
[root@localhost ~]# ls && echo yes anaconda-ks.cfg install.log install.log.syslog yes
- 练习2:命令1不正确执行。
[root@localhost ~]# lsfgdf && echo yes -bash: lsfgdf: command not found
说明:
($?=0)
这里先不说什么意思,后边预定义变量在讲。
3、多命令执行符||
||
又叫逻辑或执行符。
命令格式:命令1 || 命令2
说明:
- 当命令1执行不正确($?≠0),则命令2才会执行。
- 当命令1正确执行($?=0),则命令2不会执行。
- 命令1和命令2之间可以没有任何逻辑联系。
- 练习1:命令1正确执行。
[root@localhost ~]# ls && echo no anaconda-ks.cfg install.log install.log.syslog
- 练习2:命令1不正确执行。
[root@localhost ~]# lsfgdfgg && echo no -bash: lsfgdfgg: command not found no
4、&&
和||
联合应用
&&
和||
两个执行符可以联合应用,来判断命令是否正确执行。
执行语句:
[root@localhost ~]# ls && echo yes || echo no
如果ls
命令正确执行了,则echo yes
命令就会执行,会输出一个yes
。echo no
命令判断前边echo yes
命令执行了,则echo no
命令则不会执行。
如果ls
命令报错了,则echo yes
命令就不会被执行,echo no
命令需要判断前边的命令是否执行错误,因为echo yes
命令没有执行,被跳过了,所以是判断ls
命令是否报错,而ls
命令报错了,则执行echo no
命令,输出no
。
换句话说,ls
位置的命令,如果正确执行,则输出yes
,如果错误执行,则输出no
。
(所以需要注意的是,需要判断命令执行是否出错,而不是命令是否执行。不执行的命令就被挖掉,不予判断。)
练习:
[root@localhost ~]# ls && echo yes || echo no
anaconda-ks.cfg install.log install.log.syslog
yes
[root@localhost ~]# lsfgjhg && echo yes || echo no
-bash: lsfgjhg: command not found
no
提出一个问题:
我能不能把上边命令中的
&&
和||
的位置互换?答案是不能。
直接看例子,自己推导:
[root@localhost ~]# ls || echo yes && echo no anaconda-ks.cfg install.log install.log.syslog no [root@localhost ~]# lsfgjhg || echo yes && echo no -bash: lsfgjhg: command not found yes no
结论:这是一个固定格式。