中括号
中括号分為單中括号[],和雙中括号[[]],中括号一般用于表達式判斷中,小括号也可以用于表達式,這個後面提到。
單中括号[]
<code>A=5</code>
<code>B=3</code>
<code>[ $A -</code><code>eq</code> <code>$B ] 判斷A是否等于B</code>
<code>[ ${A} -</code><code>eq</code> <code>${B} ] 作用同上</code>
<code>[ </code><code>"${A}"</code> <code>-</code><code>eq</code> <code>"${B}"</code> <code>] 作用同上</code>
<code>A=ABC</code>
<code>[ $A == </code><code>"ABC"</code> <code>] 或寫成 [ ${A} == </code><code>"ABC"</code> <code>] 或寫成 [ </code><code>"${A}"</code> <code>== </code><code>"ABC"</code> <code>]</code>
<code>[ $A \> </code><code>"ABC"</code> <code>]</code>
<code>[ -d .</code><code>/aaa</code><code>.sh -a -e .</code><code>/bbb</code> <code>] 測試aaa.sh是否為目錄并且bbb是否存在,如果都符合則傳回真</code>
<code>[ -d .</code><code>/aaa</code><code>.sh -o -e .</code><code>/bbb</code> <code>] 測試aaa.sh是否為目錄并且bbb是否存在,滿足一個條件則傳回真</code>
我們通過上面可以看出使用單中括号的一些規則:
變量與中括号之間要有空格
變量與操作符之間也要有空格
變量可以直接用$進行引用,也可以使用${}以及"${}"進行引用,雖然可以直接使用${},但是建議還是用"${}",或者直接用$,來引用變量
字元串要用雙引号引起來
字元串比較一般使用==來做字元串是否相同測試,使用<或者>進行大小比較,在單中括号中對字元進行大于和小于的比較要用轉移\>和\<。比較原理就是對比ASCII進行對比。
另外在單中括号中還可以使用-a和-o這樣的邏輯運算符
雙中括号[[]]:
<code>[[ $A -</code><code>eq</code> <code>$B ]] 判斷A是否等于B</code>
<code>[[ ${A} -</code><code>eq</code> <code>${B} ]] 作用同上</code>
<code>[[ </code><code>"${A}"</code> <code>-</code><code>eq</code> <code>"${B}"</code> <code>]] 作用同上</code>
<code>[[ $A == </code><code>"ABC"</code> <code>]] 或寫成 [[ ${A} == </code><code>"ABC"</code> <code>]] 或寫成 [[ </code><code>"${A}"</code> <code>== </code><code>"ABC"</code> <code>]] 或寫成 [[ $A == ABC ]]</code>
<code>[[ $A > </code><code>"ABC"</code> <code>]]</code>
<code>[[ -d .</code><code>/aaa</code><code>.sh && -e .</code><code>/bbb</code> <code>]] 測試aaa.sh是否為目錄并且bbb是否存在,如果都符合則傳回真</code>
<code>[[ -d .</code><code>/aaa</code><code>.sh || -e .</code><code>/bbb</code> <code>]] 測試aaa.sh是否為目錄并且bbb是否存在,滿足一個條件則傳回真</code>
<code>[[ $A =~ </code><code>"A"</code> <code>]] 做模式比對,這個表達式為真</code>
<code>或寫成 [[ ${A} =~ </code><code>"A"</code> <code>]] 或寫成 [[ </code><code>"$[A]"</code> <code>=~ </code><code>"A"</code> <code>]]</code>
<code>[[ $A = A* ]] 表達式為真 [[ $A = B* ]] 表達式為假</code>
雙中括号的使用和單中括号的使用規則類似
雙中括号中間字元串的大于小于比較不需要轉義,且字元串可以不用雙引号引用
雙中括号裡面可以使用&&、||做邏輯運算符
雙中括号裡面還可以做模糊比對,使用=~表達式2可以是正規表達式
<code>[ 表達式1 -a 表達式2 ] 等效于 [[ 表達式1 && 表達式2 ]] 等效于 [ 表達式1 ] && [ 表達式2 ] 等效于 [[ 表達式1 ]] && [[ 表達式2 ]]</code>
<code>[ 表達式1 -o 表達式2 ] 等效于 [[ 表達式1 || 表達式2 ]] 等效于 [ 表達式1 ] || [ 表達式2 ] 等效于 [[ 表達式1 ]] || [[ 表達式2 ]]</code>
小括号
單小括号
單小括号單獨使用是表示指令組,會通過子shell的方式依次執行括号中的指令
<code>(</code><code>ls</code> <code>./;</code><code>echo</code> <code>"hello"</code><code>;</code><code>mkdir</code> <code>-p </code><code>/tmp/ccc</code><code>)</code>
最常見的用法這是指令替換中使用,指令替換也可以使用反引号``
<code>echo</code> <code>"目前目錄是:$(pwd)"</code>
<code>echo</code> <code>"目前目錄是:`pwd`"</code>
雙小括号
常用在算術運算上以及在for循環中也會用到
<code>A=$((5+3))</code>
<code>B=$(($A+4))</code>
For語句的形式
1到10循環執行
<code>寫法1:</code>
<code>for</code> <code>I </code><code>in</code> <code>(1..10);</code><code>do</code>
<code>done</code>
<code>寫法2:</code>
<code>for</code> <code>I </code><code>in</code> <code>seq</code> <code>1 10;</code><code>do</code>
<code>寫法3:</code>
<code>for</code> <code>(( i=1 ; i<=10 ; i++ )); </code><code>do</code>
While語句的形式
1到10循環
<code>I=1</code>
<code>while</code> <code>[ $I -</code><code>le</code> <code>10 ];</code><code>do</code>
<code> </code><code>let</code> <code>I++</code>
<code></code>
本文轉自linuxjavachen 51CTO部落格,原文連結:http://blog.51cto.com/littledevil/1875711,如需轉載請自行聯系原作者