Shell腳本中的各類括號

小括號的用法正則表達式

一、數組賦值shell

二、子Shell賦值express

在子shell中變量var值爲lookback,可是在上級shell中就不是這個值,能夠看出是在子shell中有效的賦值數組

三、命令集合結果重定向bash

四、$()的用法測試

$(cmd)命令替換 spa

五、(())的用法命令行

加強括號的用法, 經常使用於算術運算比較. 雙括號中的變量能夠不使用$符號前綴, 只要括號中的表達式符合C語言運算規則, 支持多個表達式用逗號分開.
好比能夠直接使用for((i=0;i<5;i++)), 若是不使用雙括號, 則爲for i in `seq 0 4`或者for i in {0..4}.
再如能夠直接使用if (($i<5)), 若是不使用雙括號, 則爲if [ $i -lt 5 ].code

中括號的使用字符串

一、單中括號

①bash 的內部命令,[和test是等同的。若是咱們不用絕對路徑指明,一般咱們用的都是bash自帶的命令。if/test結構中的左中括號是調用test的命令標識,右中括號是關閉條件判斷的。這個命令把它的參數做爲比較表達式或者做爲文件測試,而且根據比較的結果來返回一個退出狀態碼。if/test結構中並非必須右中括號,可是新版的Bash中要求必須這樣。
②Test和[]中可用的比較運算符只有==和!=,二者都是用於字符串比較的,不可用於整數比較,整數比較只能使用-eq,-gt這種形式。不管是字符串比較仍是整數比較都不支持大於號小於號(雙小括號支持)。若是實在想用,對於字符串比較可使用轉義形式,若是比較"ab"和"bc":[ ab \< bc ],結果爲真,也就是返回狀態爲0。[ ]中的邏輯與和邏輯或使用-a 和-o 表示。
③字符範圍。用做正則表達式的一部分,描述一個匹配的字符範圍。做爲test用途的中括號內不能使用正則。
④在一個array 結構的上下文中,中括號用來引用數組中每一個元素的編號。

#!/bin/sh  
  
#shell中對變量的值添加單引號,爽引號和不添加的區別,對類型來講是無關的,主要是單引號不  
#對相關量進行替換,如$解釋成變量引用用值替代,雙引號則進行替代  
  
A="$1"  
B="$2"  
  
  
echo "輸入的原始值:A=$A,B=$B"  
  
#下面的比較只能用於整數格式的比較(不能是小數),不然出現  
#integer expression expected的錯誤  
  
echo "shell風格:"  
if [ $A -eq $B ];then  
   echo "eq"  
fi  
  
if [ $A -ge $B ];then  
   echo "ge"  
fi  
  
if [ $A -le $B ];then  
   echo "le"  
fi  
  
  
if [ $A -ne $B ];then  
   echo "ne"  
fi  
  
if [ $A -gt $B ];then  
   echo "gt"  
fi  
  
if [ $A -lt $B ];then  
   echo "lt"  
fi  
  
echo "c風格的比較"  
#下面的c風格也ok,但主要是須要雙括號  
if (($A == $B));then  
   echo "=="  
fi  
  
if (($A >= $B));then  
   echo ">="  
fi  
  
if (($A <= $B));then  
   echo "<="  
fi  
  
if (($A != $B));then  
   echo "!="  
fi  
  
if (($A > $B));then  
   echo ">"  
fi  
  
if (($A < $B));then  
   echo "<"  
fi

二、雙中括號

①[[是 bash 程序語言的關鍵字。並非一個命令,[[ ]] 結構比[ ]結構更加通用。在[[和]]之間全部的字符都不會發生文件名擴展或者單詞分割,可是會發生參數擴展和命令替換。
②支持字符串的模式匹配,使用=~操做符時甚至支持shell的正則表達式。字符串比較時能夠把右邊的做爲一個模式,而不只僅是一個字符串,好比[[ hello == hell? ]],結果爲真。[[ ]] 中匹配字符串或通配符,不須要引號。
③使用[[ ... ]]條件判斷結構,而不是[ ... ],可以防止腳本中的許多邏輯錯誤。好比,&&、||、<和> 操做符可以正常存在於[[ ]]條件判斷結構中,可是若是出如今[ ]結構中的話,會報錯。
④bash把雙中括號中的表達式看做一個單獨的元素,並返回一個退出狀態碼。

大括號

一、${var}

Shell中變量的原形,當變量名和後面的內容都是變量命名所容許的內容時候這時候直接用$var是不行的得用{}把變量名括起來

二、${var:-string}

當變量var值爲空時${var:-a}會把a做爲值,當變量var值不爲空時,${var:-a}會把var的值做爲變量

三、${var:+string}

${var:+a}的替換規則和上面的相反,即當變量var的值不爲空的時將值換成a,當變量var爲空時則不替換或者說是替換成變量var的值,即空值。(由於變量var此時爲空,因此這兩種說法我認爲是同樣的)

四、${var:=string}

當變量var值爲空時,${var:=a}會將其賦值爲a,且變量var也被賦值是a了,若變量var不爲空時,${var:=string}的值都是變量var的值。(很經常使用的一種用法是,判斷某個變量是否賦值,沒有的話則給它賦上一個默認值。)

五、${var:?string}

若變量var不爲空,則用變量var的值來替換${var:?string};若變量var爲空,則把string輸出到標準錯誤中,並從腳本中退出。咱們可利用此特性來檢查是否設置了變量的值。

六、${var%pattern}

{variable%pattern},這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,若是是,就從命令行把variable中的內容去掉右邊最短的匹配模式

七、${variable%%pattern}

${variable%%pattern},這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,若是是,就從命令行把variable中的內容去掉右邊最長的匹配模式

八、${variable#pattern}

${variable#pattern} 這種模式時,shell在variable中查找,看它是否一給的模式pattern開始,若是是,就從命令行把variable中的內容去掉左邊最短的匹配模式

九、${variable##pattern}

 

${variable##pattern} 這種模式時,shell在variable中查找,看它是否一給的模式pattern開始,若是是,就從命令行把variable中的內容去掉左邊最長的匹配模式

相關文章
相關標籤/搜索