『忘了再学』Shell基础 — 7、Bash基本功能(多命令顺序执行)
阅读原文时间:2022年04月01日阅读:1

目录

Linux系统支持多条命令顺序执行,就是我可以依次输入多条命令后,统一按Enter键,顺序执行。

在多个命令之间加;即可多命令顺序执行。

命令格式:命令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]#

&&又叫逻辑与执行符。

命令格式:命令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)这里先不说什么意思,后边预定义变量在讲。

||又叫逻辑或执行符。

命令格式:命令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

&&||两个执行符可以联合应用,来判断命令是否正确执行。

执行语句:

[root@localhost ~]# ls  && echo yes || echo no

如果ls命令正确执行了,则echo yes命令就会执行,会输出一个yesecho 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

结论:这是一个固定格式。