『忘了再學』Shell基礎 — 7、Bash基本功能(多命令順序執行)

繁華似錦Fighting發表於2022-03-31

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命令就會執行,會輸出一個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

結論:這是一個固定格式。

相關文章