首先,值得提一下的是,在bash裡,最小的執行單位應該是pipeline. bash支援對pipelines進行組合,產生順序、條件、迴圈等結構。每個pipeline在其自己的subshell中執行,有自己的pid. 但是為了方便,在這裡介紹順序、條件、迴圈結構時,不刻意強調是由pipeline組成,依舊以命令(command)視為基本單元
$ command1;command2
以;分隔的命令按順序執行。
shell會依次等待每個命令執行終止,即每個命令都在自己的subshell中執行。shell會在上乙個命令執行完後再執行下乙個命令,無論上乙個命令的exit status是多少。
return status是最後執行的命令的exit status。
;可以被換行符代替,而且可以被連續多個換行符代替。但是注意,多個換行符只等效於乙個; .即如下形式,和上面的結構等價。
command1
command2
command1
command2
下面的結構也合法,效果也相同。但這裡;的作用是comand1的終止符,而不是分隔符。
command1;
command2
所以下面的結構就有語法錯誤
command1
;# syntax error near unexpected token `;'
command2
&既可以作為命令的終止符,也可以作為命令序列的分隔符
作為終止符
$ command
&
shell在subshell中非同步執行命令。在pipeline一文裡介紹過,shell命令在其自己的subshell中執行,有自己的pid. 這一點,非同步執行命令和同步執行命令是一樣的。非同步執行的不同處在於,shell不會等待命令完成,而是立即返回,return status為0. 命令會在後台執行。
作為分隔符
command1&command2
shell會先執行command1,但不會等待command1的完成,立即執行command2。所以,雖然command1先於command2執行,但是command1不一定先於command2完成。
在這個結構裡,shell對command2的執行是同步的。所以整個結構的return status由command2決定。
又是分隔符,又是終止符
command1&command2&
shell會先執行command1,但不會等待command1的完成,立即執行command2. shell對command2的執行也是非同步的。整個結構的return status就是0. command1雖先於command2執行,但它們完成的先後順序無法確定。
command1 && command2
僅當command1的exit status為0時,才會執行command2
command1 || command2
僅當command1的exit status不為0時,才會執行command2
這兩種序列的return status由最後得到執行的命令的exit status決定。
bash基礎功能之多命令順序執行與管道符
1.多命令順序執行 多命令執行符 格式作用 命令1 命令2 多個命令順序執行,命令之間沒有任何邏輯聯絡 命令1 命令2 邏輯與當命令1正確執行,則命令2才會執行 當命令1執行不正確,則命令2不會執行 命令1 命令2 邏輯或當命令1執行不正確,則命令2才會執行 當命令1執行正確,則命令2不會執行 舉例...
bash執行多條命令
在使用git過程中,命令比較多,希望改為一條命令 git提交時,總共需要三條命令 git add git commit m git push origin branchl branchrls date cd user pwd執行順序 命令順序執行,命令之間不存在關係,互不影響 作用 連線多個命令,簡...
Bash基礎 命令組
bash提供了兩種方法將命令列表組合作為乙個單元執行。和 組合命令後,重定向應用於整個命令列表。echo 1 echo 2 foo 1 cat foo 2 echo 1 echo 2 foo cat foo 12兩種組合方式的區別 list 會建立乙個subshell環境,list這個環境下執行。不...