Linux Shell基礎 多個命令中的分號(;)、與(&&) 、 或(||)


概述

在 Bash 中,如果需要讓多條命令按順序執行,則有這樣方法,如表 1 所示。

多命令執行符 格 式 作 用
命令1 ; 命令2 多條命令順序執行,命令之間沒有任何邏輯關系
&& 命令1 && 命令2 如果命令1正確執行($?=0),則命令2才會執行
如果命令1執行不正確($?≠0),則命令2不會執行
II 命令1 || 命令2 如果命令1執行不正確($?≠0),則命令2才會執行
如果命令1正確執行($?=0),則命令2不會執行

";"多命令順序執行

如果使用分號";"連接多條命令,那么這些命令會一次執行,但是各命令之間沒有任何邏輯關系,不論哪條命令報錯了,后面的命令仍會依次執行。例如:

cd /user命令出錯不影響其他命令的執行,所以當我們需要一次執行多條命令,而這些命令之間又沒有可邏輯關系時,就可以使用";"來連接多條命令。

[root@localhost ~]# ls ; date; cd /user; pwd
anaconda-ks.cfg
Tue Nov 20 20:59:42 CST 2018
-bash: cd: /user: No such file or directory
/root

"&&"邏輯與

如果使用"&&"連接多條命令,那么只有第一條命令正確執行了,"&&"連接的第二條命令才會執行。在Bash中通過預定義變量 $?來判斷上一條命令是是否執行成功,如果 $? 返回值是 0,則證明上一條命令正確執行;如果 $? 返回值是非 0,則證明上一條命令執行錯誤。

例如: 復制/root/test到/tmp/test,如果命令成功則刪除原文件,並打印"yes"。在執行過程中,因為沒有test這個文件或目錄,所以cp命令無法獲取"/root/test"的文件狀態(stat),,所以第一條命令執行不正確,第二和第三條命令也都不執行了。

[root@localhost ~]# cp /root/test /tmp/test && rm -rf/ root/test && echo yes

通常在安裝源碼包時,需要執行"./configure"、"make"和"make install"命令,但是在安裝軟件時又需要等待較長時間,則可以利用"&&"同時執行這三條命令,例如

[root@localhost ~]# cd httpd-2.2.9
[root@localhost httpd-2.2.9]# ./configure --prefix=/usr/ local/apache2 && make && make install

"||"邏輯或

如果使用"||"連接多條命令,則只有前一條命令執行錯誤,后一條命令才能執行。

例如:因為無法訪問/root/test:沒有那個文件或目錄,所以用ls命令查看時報錯了。因為第一條命令執行錯誤,所以第二條命令才正確執行

[root@localhost ~]#ls /root/test || mkdir/root/tdir

在腳本中如果我們想要判斷某條命令是否正確執行,就可以使用下面命令:

因為/root/test文件不存在,第一條命令報錯,則第二條命令不能正確執行,因為第二條命令執行錯誤,所以第三條命令正確執行,打印"no"

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM