天天看點

Linux shell中的(()),[[]],&&,||使用總結

((表達式1, 表達式2...)) ,裡面的表達式可以和c語言的表達式一樣使用,甚至是3目運算符,變量無需使用$表示;支援多個表達式,但是并不支援多個語句;多個表達式的分割标志是 逗号,如果用分号隔開,表示多個語句;當使用多個語句的時候會報錯;

表達式的值可以指派給其他變量,這時候需要用 $((表達式)) 來擷取表達式的值,然後指派給變量;

對于for語句來說,通常需要的是條件表達式,而 條件表達式通常是一組語句組成的,這時候支援在(())中使用多個語句,因為盡管是多個語句的形式,但是是被 for用作 條件表達式使用的;

&& , || 指令連接配接符号 ,常用格式為: command1 && command2 , 或者 command1 || command2,根據command1的 $? 值決定後面的指令是否運作;

我們有時候會看到 command1 && command2 || command3 這種方式,其實這種方式是不推薦的,因為很容易出錯:

如果command1 執行成功,那麼執行command2, 但是如果command2 執行失敗,那麼将執行command3. 進而變成了 command1成功了,command3被執行了;

而如果command1 執行失敗,那麼command2将不會執行,是以遇到 command3的時候,發現應該執行command3. 因為 command1的結果就是 : command1 && command2的結果; 此時就變成了: command1 執行失敗, command3被執行了;

也就是說,無論commmand1 成功與否,command3 都有可能被執行,是以不推薦這種用法;

[[ ]] 與 [ ] 用于組合條件判斷:

在[ ] 内表示多個條件的時候,需要用 -a, -o 表示邏輯關系,如果遇到變量,變量名最好用雙引号括起來,避免遇到變量為空時候的報錯;

在使用[[ ]] 表示多個條件的時候,多個條件之間的邏輯關系需要使用 && , || 表示,不支援 -a, -o , 同時 [[ ]] 内部的變量不需要用雙引号括起來;

如果隻有一個條件,那麼兩者除了變量是否需要雙引号之外,沒有其他差別;

繼續閱讀