當(dāng)初自己在學(xué)習(xí)shell編程的時(shí)候,被各種括號的用法搞得頭昏腦漲。靠著逐步的熟悉和積累,才終于掌握的所有的括號的用法。現(xiàn)在,把自己總結(jié)出來的分享給大家。
注:看本篇文檔的前提是你已經(jīng)有了bash以及shell編程的基礎(chǔ)。
單小括號()
但小括號常見的兩個(gè)作用:命令替換以及數(shù)組的初始化
命令替換
當(dāng)碰到$()結(jié)構(gòu)時(shí),shell就把括號的內(nèi)命令執(zhí)行,并返回結(jié)果
#?tmp=$(date) #?echo?$tmp Fri?Sep?18?10:22:30?CST?2020
初始化數(shù)組
#?初始化數(shù)組 lnmp=(linux?nginx?mysql?php)
雙小括號(())
記住雙括號有一個(gè)特點(diǎn),就是括號內(nèi)的要符合c語言的語法,使用變量名時(shí)不需要加上$符號的。
雙小括號的用法比較多,它可以用作整數(shù)計(jì)算(不支持小數(shù))。例如:$((3+2))
#?echo?$((1+3)) 4 #?n1=3 #?echo?$((n1+7)) 10
只要符合c語言語法的運(yùn)算擴(kuò)展,都可以寫在括號里
#?echo?$((3+4>5???1?:0))? 1 #?echo?$((3+4>9???1?:0))? 0
重新給變量賦值,這個(gè)時(shí)候不可在括號外加$符
#?i=1;((i++));echo?$i; 2 #?i=1;((i=100));echo?$i; 100
for?((i=0;i<p><strong><span style="font-size: 24px;">單方括號[]</span></strong></p><p>單方括號最常見用于邏輯判斷中,另外它還可以作為數(shù)組的下標(biāo),以及在正則中表示一段范圍</p><p>shell腳本中用于條件判斷:</p><pre class="brush:php;toolbar:false">if?[?1?>?2?]?then ????…… fi
也可以作為數(shù)組下標(biāo):
#?echo?${lnmp[1]} nginx
在正則中使用,表示一段范圍
[0-9]??表示數(shù)子0-9都行
雙方括號
和單括號一樣,雙方括號也用在條件判斷中,但它比單方括號更加的通用。下面舉一個(gè)例子:
[?a?>?b?]?&&?[?a?>?0?]或[?a?>?b?-a?a?>?0?] 改成雙括號 [[?a?>?b?&&?a?>?0?]]
單花括號{}
花括號拓展。(通配(globbing))將對花括號中的文件名做擴(kuò)展。在大括號中,不允許有空白,除非這個(gè)空白被引用或轉(zhuǎn)義。
比如輸入命令 rm -f {1,2}.txt將刪除1.txt和2.txt文件。
單花括號中..的作用
兩個(gè)點(diǎn)在這里表示一段范圍的意思。比如
echo?{1..10}??#將打印1,2,3,4,5,6,7,8,9,10
花括號還常用在shell腳本里,用于代碼塊。
初次之外,單花括號還可以用作變量內(nèi)容的替換和刪除以及變量內(nèi)容的測試,給出一個(gè)常見的例子。我們常常會(huì)判斷一個(gè)變量是否存在,如果不存在,則給該變量設(shè)置新值。
val=${n1:-test}
上面代碼表示如果n1這個(gè)變量不存在或?yàn)榭眨瑒t將val變量值設(shè)置為test,否則val值為n1變量的值