一、小括號,圓括號()
1、單小括號 ()
2、雙小括號 (( ))
二、中括號,方括號[]
1、單中括號 []
2、雙中括號[[ ]]
例子:
- if (i<5) </span></span></li><li class=""><span><span class="keyword">if</span><span> [ i -lt 5 ]
- if [ a -ne 1 -a a != 2 ]
- if [ a -ne 1] && [ a != 2 ]
- if [[ a != 1 && a != 2 ]]
- for i in (seq 0 4);</span><span class="keyword">do</span><span> echo i;done
- for i in `seq 0 4`;do echo i;done </span></span></li><li class="alt"><span><span class="keyword">for</span><span> ((i=0;i<5;i++));</span><span class="keyword">do</span><span> echo i;done
- for i in {0..4};do echo i;done </span></span></li></ol></div><pre code_snippet_id="475562" snippet_file_name="blog_20140926_1_5693199" name="code" class="cpp" style="display: none;"> if ( i<5)
if [
i−lt5]if[ a -ne 1 -aa!=2]if[ a -ne 1] && [a!=2]if[[ a != 1 &&a!=2]]foriin (seq 0 4);do echoi;doneforiin‘seq04‘;doecho i;done for ((i=0;i<5;i++));do echoi;doneforiin0..4;doecho i;done
三、大括號、花括號 {}
1、常規用法
2、幾種特殊的替換結構
var:−string, {var:+string},var:=string, {var:?string}
③
補充擴展:在上面這五種替換結構中string不一定是常值的,可用另外一個變量的值或是一種命令的輸出。
#和%中的單一符號是最小匹配,兩個相同符號是最大匹配。
{var%pattern}, {var%%pattern},{var#pattern}, {var##pattern}
第一種模式:${variable%pattern},這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最短的匹配模式第二種模式: ${variable%%pattern},這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最長的匹配模式
第三種模式:${variable#pattern} 這種模式時,shell在variable中查找,看它是否一給的模式pattern開始,如果是,就從命令行把variable中的內容去掉左邊最短的匹配模式
第四種模式: ${variable##pattern} 這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最長的匹配模式
這四種模式中都不會改變variable的值,其中,只有在pattern中使用了*匹配符號時,%和%%,#和##纔有區別。結構中的pattern支持通配符,*表示零個或多個任意字符,?表示僅與一個任意字符匹配,[…]表示匹配中括號裏面的字符,[!…]表示不匹配中括號裏面的字符。
- # var=testcase
- # echo var </span><span> </span></span></li><li class="alt"><span>testcase </span></li><li class=""><span><span class="preprocessor"># echo {var%s*e}
- testca
- # echo var </span><span> </span></span></li><li class="alt"><span>testcase </span></li><li class=""><span><span class="preprocessor"># echo {var%%s*e}
- te
- # echo {var#?e} </span><span> </span></span></li><li class="alt"><span>stcase </span></li><li class=""><span><span class="preprocessor"># echo {var##?e}
- stcase
- # echo {var##*e} </span><span> </span></span></li><li class="alt"><span> </span></li><li class=""><span><span class="preprocessor"># echo {var##*s}
- e
- # echo ${var##test}
- case
# var=testcase
# echo $var
testcase
# echo ${var%s*e}
testca
# echo $var
testcase
# echo ${var%%s*e}
te
# echo ${var#?e}
stcase
# echo ${var##?e}
stcase
# echo ${var##*e}
# echo ${var##*s}
e
# echo ${var##test}
case
4、字符串提取和替換
var:num, {var:num1:num2},var/</span><spanstyle="font−size:14px">pattern</span><spanstyle="font−size:14px">/pattern, {var//pattern/pattern}
第一種模式:第二種模式:
第三種模式:${var/pattern/pattern}表示將var字符串的第一個匹配的pattern替換爲另一個pattern。。
第四種模式:{var//pattern/pattern}表示將var字符串中的所有能匹配的pattern替換爲另一個pattern。</span></span></span></font></font></font></font></font></font></font></font><div class="dp-highlighter bg_html"><div class="bar"><div class="tools"><b>[html]</b> <a href="#" class="ViewSource" title="view plain" οnclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" target="_blank">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" οnclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" target="_blank">copy</a><div style="position: absolute; left: 564px; top: 3977px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_4" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_4" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=4&width=18&height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" οnclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" target="_blank">print</a></span><a href="#" class="About" title="?" οnclick="dp.sh.Toolbar.Command('About',this);return false;" target="_blank">?</a></div></div><ol start="1" class="dp-xml"><li class="alt"><span><span>[root@centos ~]# </span><span class="attribute">var</span><span>=/home/centos </span></span></li><li class=""><span>[root@centos ~]# echo var
[root@centos ~]# var=/home/centos
[root@centos ~]# echo $var
/home/centos
[root@centos ~]# echo ${var:5}
/centos
[root@centos ~]# echo ${var: -6}
centos
[root@centos ~]# echo ${var:(-6)}
centos
[root@centos ~]# echo ${var:1:4}
home
[root@centos ~]# echo ${var/o/h}
/hhme/centos
[root@centos ~]# echo ${var//o/h}
/hhme/cenths
四、符號$後的括號
(1)${a} 變量a的值, 在不引起歧義的情況下可以省略大括號。
(2)
(3)$((expression)) 和`exprexpression`效果相同, 計算數學表達式exp的數值, 其中exp只要符合C語言的運算規則即可, 甚至三目運算符和邏輯表達式都可以計算。
五、使用
1、多條命令執行
(1)單小括號,(cmd1;cmd2;cmd3) 新開一個子shell順序執行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最後一個命令後可以沒有分號。
(2)單大括號,{ cmd1;cmd2;cmd3;} 在當前shell順序執行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最後一個命令後必須有分號, 第一條命令和左括號之間必須用空格隔開。
對{}和()而言, 括號中的重定向符隻影響該條命令, 而括號外的重定向符影響到括號中的所有命令。