首先copy一下其使用方法:
參考:語法:
((表示式1,表示式2…))
特點:
1、在雙括號結構中,所有表示式可以像c語言一樣,如:a++,b--等。
2、在雙括號結構中,所有變數可以不加入:「$」符號字首。
3、雙括號可以進行邏輯運算,四則運算
4、雙括號結構 擴充套件了for,while,if條件測試運算
5、支援多個表示式運算,各個表示式之間用「,」分開
舉個栗子:
#!/bin/bash
a=1;
b="ab";
echo $((a>1?8:9));
((b!="a"))&& echo "err2";
((a<2))&& echo "ok";
輸出:
[root@izeus41 yuxz]# a.sh
9err2
ok
but !!!!如果做運算的是多個字元的字串時,(())的返回結果卻大不一樣(注意雙括號裡面變成了b!="as"):
#!/bin/bash
a=1;
b="ab";
echo $((a>1?8:9));
((b!="as"))&& echo "err2";
((a<2))&& echo "ok";
輸出:
[root@izeus41 yuxz]# a.sh
9ok
因為((b!="as"))返回了1,即false,所以後面不執行了。為什麼為什麼為什麼!
(("a"=="b")) && echo "err2" 居然輸出err2 額
找找資料,
!!!雙括號裡面會把字串都轉化成數字!!!
實驗了一下總結:數字字串=》數字,非數字字串=》0,以下:
#!/bin/sh
a=9((a=="1")) && echo "err1" // 無輸出
((a=="9")) && echo "err1" // 有輸出
b="abc"
((b==1)) && echo "err1" // 無輸出
((b==0)) && echo "err1" // 有輸出
c="123abc"
((c=="123")) && echo "err1" // 報語法錯誤
//bash: ((: 123abc: value too great for base (error token is "123abc")
bash在遇到數字開頭的串時,會將整個串轉化為數字,結果導致溢位錯誤了。
好吧,雙括號在用來判斷條件真假的時候還是比較複雜的,慎用了,最好變數都是數字型別。
以後還是用[ ] 或者[[ ]]來做判斷比較好。當然 (())也有其他用途,這以後再說了。
另外補充一下,bash reference manual裡面的介紹,英文版使用手冊蠻不錯,多學學
(( expression ))
if the value of the expression is non-zero, the return status is 0; otherwise the return status is 1.
雙括號的判斷結果會把[ ]的結果反過來的。不過這跟上面說的結果沒什麼關係了
Linux Shell 管道命令 pipe 的使用
command1正確輸出,作為command2的輸入 然後comand2的輸出作為,comand3的輸入 comand3輸出就會直接顯示在螢幕上面了。通過管道之後 comand1,comand2的正確輸出不顯示在螢幕上面 注意 1 管道命令只處理前乙個命令正確輸出,不處理錯誤輸出 2 管道命令右邊命...
Shell 雙括號運用
在剛開始學習inux shell指令碼程式設計時候,對於它的 四則運算以及邏輯運算。估計很多朋友都感覺比較難以接受。特變邏輯運算子 使用時候,必須保證運算子與算數 之間有空格。四則運算也只能借助 let,expr等命令完成。今天講的雙括號 結構語句,就是對shell中算數及賦值運算的擴充套件。使用方...
雙圓括號結構
雙圓括號結構 與let命令很相似,結構允許算術擴充套件和賦值.舉個簡單的例子,a 5 3 將把變數 a 設為 5 3 或者8.然而,雙圓括號結構也被認為是在bash中使用c語言風格變數操作的一種處理機制.bin bash a 23 c語言風格的變數賦值,兩邊允許有空格.echo a initial ...