1. 程式人生 > >SHELL指令碼攻略(學習筆記)--1.3 多命令邏輯執行順序

SHELL指令碼攻略(學習筆記)--1.3 多命令邏輯執行順序

每條命令後如果不加&的話就是依次一行一行的順序執行,只有前面一行執行完成後再執行下一行,事實上還有很多特殊符號可用來分隔單個的命令:分號(;)、管道(|)、&、邏輯AND (&&),還有邏輯OR (||)。對於每一個讀取的管道,Shell都回將命令分割,

命令執行操作符

多條命令可以在一行中出現。它們可以從左到右順序執行。此時,各條命令之間應以分號( ;)隔開.
如:
   pwd ; who | wc -l ; cd /usr/bin

在相鄰命令間可存在邏輯關係,即邏輯“與”和邏輯“或”。

邏輯與操作符“&&”;
其一般形式:   命令1 && 命令2

其功能是先執行命令1,如果執行成功,才執行命令2;否則,若命令1執行不成功,則不執行命令2。
<例如>
     cat  abc&&pwd
邏輯或操作符“||”;
其一般形式是: 命令1 || 命令2

例如:
cat abc || pwd
如果不能將檔案abc的內容列出來,則顯示當前工作目錄的路徑。

在Shell中有兩種方式可以將若干命令組合在一起,使其在邏輯上被視為一條命令,它們是用花括號{ }將各命令括起來和用圓括號( )括起來。

以花括號括起來的全部命令可視為語法上的一條命令,出現在管道符的一邊。成組命令的執行順序是根據命令出現的先後次序,由左至右執行。在管道線中,成組命令把各命令的執行結果彙集在一起,形成一個輸出流,這個流作為該管道線中下一個命令的輸入。
例如,
{ echo "User Report for ` date ` . "; who ; } | pr
使用花括號時在格式上應注意:
左括號 “{ ”後面應有一個空格;右括號“}”之前應有一個分號( ;)。


成組命令也可以用圓括號括起來。
例如:
(echo "Current directory is ` pwd ` . "
cd /home/mengqc ; ls -l ;
cp m1 em1 && rm m1
cat em1) | pr
如上所示,在用圓括號括起成組命令時,左括號後不必有空格,右括號之前也不需加上分號。

二者執行過程相同,但是存在重要區別:用花括號括起來的成組命令只是在本Shell內執行命令表,不產生新的程序;而用圓括號括起來的成組命令是在新的子Shell內執行,要建立新的子程序。因此,在圓括號內的命令不會改變父Shell的變數值及工作目錄等。

$( ) 與 ` ` (反引號)一樣都是做命令替換的


()子Shell中執行

{ ;}當前shell中執行

[code]command1 `command2 \`command3\` `[/code]用轉意符可以巢狀反引號
1先執行command3 2執行command2 3 執行Command1

要不然,換成 $( ) 就沒問題了:
[code]command1 $(command2 $(command3))[/code]

1.3.1 分號;

當多個命令想在寫在一行上同時執行,可以在每個命令後使用分號“;”。多個命令之間沒有任何邏輯關係,所有寫出來的命令都會執行,即使某個命令有錯誤也不影響其他命令。

[[email protected] ~]# ls das;echo "hdakl"

ls: cannot access das: No such file or directory

hdakl