概述
在 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"