1. 程式人生 > >Shell最全大括號{}、中括號[]、小括號()用法例項

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}:若變數

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},這種模式時,shellvariable中查詢,看它是否一給的模式

pattern結尾,如果是,就從命令列把variable中的內容去掉右邊最短的匹配模式;
     第二種模式: ${variable%%pattern},這種模式時,shellvariable中查詢,看它是否一給的模式pattern結尾,如果是,就從命令列把variable中的內容去掉右邊最長的匹配模式;
     第三種模式:${variable#pattern} 這種模式時,shellvariable中查詢,看它是否一給的模式pattern開始,如果是,就從命令列把variable中的內容去掉左邊最短的匹配模式;
     第四種模式: ${variable##pattern} 這種模式時,shellvariable中查詢,看它是否一給的模式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