1.(())使用語法:
((表達式))用來擴展Shell中的算術運算,以及賦值運算,擴展for,while,if條件測試運算.
注意點:
1.在雙括號結構中,所有的表達式可以像c語言一樣,如a++,b--
2.在雙括號結構中,所有變量可以不加入$符號前綴,也可以加入.
3.在雙括號可以進行邏輯運算,四則運算,而且運算符合數值之間可以沒有空格,也可以有空格.
4.雙括號結構擴展了for,while,if條件測試運算.
5.支持多個表達式運算,各個表達式之間用逗號,分開.
6.使用[]時必須保證運算符與數值之間有空格,而(())時數值與運算符可以沒有空格.
小技巧:
1.新建(()).sh文件vim "(()).sh",因為()在shell中有特殊含義,只能用"括起來,用單引號也是不行的.
2.使用文件時:vim \(\(\)\).sh,可以在要使用的含有特殊符號的文件前面添加一個轉義符號\然后可以按提示按補全.
例子:求100以內的偶數
#! /bin/bash
num=2
while ((num<100)) #數值與運算符可以沒有空格,變量的使用時也可以不使用$num
do
echo "$num"
((num=num*2))
done
1
2
3
4
5
6
7
8
9
結果:
[root@yveshe ~]# ./\(\(\)\).sh
2
4
8
16
32
64
2.()和{}
多條命令執行
(1)單小括號,(cmd1;cmd2;cmd3) 新開一個子shell順序執行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最后一個命令后可以沒有分號。
(2)單大括號,{ cmd1;cmd2;cmd3;} 在當前shell順序執行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最后一個命令后必須有分號, 第一條命令和左括號之間必須用空格隔開。
對{}和()而言, 括號中的重定向符只影響該條命令, 而括號外的重定向符影響到括號中的所有命令。
1)${a} 變量a的值, 在不引起歧義的情況下可以省略大括號。
(2)$(cmd) 命令替換,和`cmd`效果相同,結果為shell命令cmd的輸,過某些Shell版本不支持$()形式的命令替換, 如tcsh。
(3)$((expression)) 和`exprexpression`效果相同, 計算數學表達式exp的數值, 其中exp只要符合C語言的運算規則即可, 甚至三目運算符和邏輯表達式都可以計算。
()和{}都是對一串的命令進行執行,但有所區別:
相同點:
()和{}都是把一串的命令放在括號里面,並且命令之間用;號隔開
不同點
()只是對一串命令重新開一個子shell進行執行,{}對一串命令在當前shell執行
()最后一個命令可以不用分號,{}最后一個命令要用分號
()里的第一個命令和左邊括號不必有空格,{}的第一個命令和左括號之間必須要有一個空格
()和{}中括號里面的某個命令的重定向只影響該命令,但括號外的重定向則影響到括號里的所有命令
3.雙中括號[[ ]]
總結:
(1)$(cmd)與··(鍵盤上1左邊的~)一樣,都是命令替換,可以將執行結果提取出來
(2)[]使用的時候[ ]前后都必須有空格,且兩個字符或數字之間的比較符左右也必須有空格。
(3) []是test的另一種形式,[]中間只能使用= 和 != 比較字符串,如果使用< 、>需要進行轉義\。
[]中間如果比較數字需要用 -lt 等符號,不能使用\<比較數字,會當成字符串處理。
(4)[[]]可用於處理邏輯命令,也可以用於處理字符串是否相等,且使用<、>不用轉義符.
(5)(())可用於比較數字,且不用轉義,而且也可以用於數字計算,比較的時候也是用普通的>,<。(())計算的時候運算符與數字之間不能有空格,例如: sum=$(($sum+4))
(6)字符串比較 用[],與普通的<,>,=,!=符號,如果使用<,>需要轉義;或者使用[[]]比較字符串也是用普通符號不用轉義
數字比較用[]的時候用-lt,-gt等符號,不能使用\<(因為會當成字符串處理);或者用(())比較數字用普通符號不用轉義
(7)可以將$理解為取變量的符號,$var 或者 ${} ,在不影響語義的情況下可以省去{},但是最好寫上{}。例如:test=XXX.$testWWWW.這時候就必須加上{}變為${test}WWWW
