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}:若變量var爲空,則用在命令行中用string來替換${var:-string},否則變量var不爲空時,則用變量var的值來替換${var:-string};對於${var:=string}的替換規則和${var:-string}是一樣的,所不同之處是${var:=string}若var爲空時,用string替換${var:=string}的同時,把string賦給變量var: ${var:=string}很常用的一種用法是,判斷某個變量是否賦值,沒有的話則給它賦上一個默認值。
B. ${var:+string}的替換規則和上面的相反,即只有當var不是空的時候才替換成string,若var爲空時則不替換或者說是替換成變量 var的值,即空值。(因爲變量var此時爲空,所以這兩種說法是等價的)
C,${var:?string}替換規則爲:若變量var不爲空,則用變量var的值來替換${var:?string};若變量var爲空,則把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支持通配符,*表示零個或多個任意字符,?表示零個或一個任意字符,[...]表示匹配中括號裏面的字符,[!...]表示不匹配中括號裏面的字符。
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