Shell最全大括號{}、中括號[]、小括號()用法例項
1、大括號{ }用法例項
1)純{ }用法
拓展功能:例如:ls {name1,name2}.sh ;touch {1..3}.sh
程式碼組織功能:例如:多條命令在當前shell中執行 { cmd1;cmd2;cmd3;},注意cmd1與{之間有空格,cmd3後邊有;
2)$結合{ }用法
取值拓展功能:例如:var=dreamer;echo ${var}way 此條語句輸出dreamerway
替換結構:${var:-string},${var:+string},${var:=string},${var:?string}
A,${var:-string}和${var:=string}:若變數
B. ${var:+string}的替換規則和上面的相反,即只有當var不是空的時候才替換成string,若var
C,${var:?string}替換規則為:若變數var不為空,則用變數var的值來替換${var:?string};若變數var為空,則把string輸出到標準錯誤中,並從指令碼中退出。我們可利用此特性來檢查是否設定了變數的值。
模式匹配替換結構:${var%pattern},${var%%pattern},${var#pattern},${var##pattern}
第一種模式:${variable%pattern},這種模式時,shell在variable中查詢,看它是否一給的模式
第二種模式: ${variable%%pattern},這種模式時,shell在variable中查詢,看它是否一給的模式pattern結尾,如果是,就從命令列把variable中的內容去掉右邊最長的匹配模式;
第三種模式:${variable#pattern} 這種模式時,shell在variable中查詢,看它是否一給的模式pattern開始,如果是,就從命令列把variable中的內容去掉左邊最短的匹配模式;
第四種模式: ${variable##pattern} 這種模式時,shell在variable中查詢,看它是否一給的模式pattern結尾,如果是,就從命令列把variable中的內容去掉右邊最長的匹配模式;
這四種模式中都不會改變variable的值,其中,只有在pattern中使用了*匹配符號時,%和%%,#和##才有區別。結構中的pattern支援萬用字元,*表示零個或多個任意字元,?表示零個或一個任意字元,[...]表示匹配中括號裡面的字元,[!...]表示不匹配中括號裡面的字元。
2、中括號[ ]用法例項
單中括號用於條件測試:"["是一個可執行程式,路徑是"/usr/bin/[",
if [ $num1 -eq $num2 ] ; then 等價於 if /usr/bin/[ $num1 -eq $num2 ] ; then
還等價於if test $num1 -eq $num2 ; then
單中括號用於陣列:例如:輸出陣列全部元素echo ${array[@]}
雙中括號:單中括號加強版 [[是 bash 程式語言的關鍵字,並不是一個命令,在單括號中是不可以用 || &&等關係運算符號的,只能用-a -o等等,例如[[ $arch_com = i386 || $ARCH = i*86 ]]
3、小括號( )用法例項
單括號程式碼組織功能:跟上邊{}不同的是,此處命令塊會在子shell中執行,例如:(cmd1;cmd2;cmd3) 這三條命令的執行不會影響當前的shell環境
單括號陣列初始化功能:例如:array=(1 2 3 4 5)
雙括號算術運算比較功能:例如:for((i=0;i<9;i++)) 如果不採用雙括號可用
for i in `seq 0 9`或者for i in {0..9}代替
參考文獻:
http://blog.csdn.net/tttyd/article/details/11742241