天天看點

Shell裡面括号的用法

中括号

中括号分為單中括号[],和雙中括号[[]],中括号一般用于表達式判斷中,小括号也可以用于表達式,這個後面提到。

單中括号[]

<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 \&gt; </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>

我們通過上面可以看出使用單中括号的一些規則:

變量與中括号之間要有空格

變量與操作符之間也要有空格

變量可以直接用$進行引用,也可以使用${}以及"${}"進行引用,雖然可以直接使用${},但是建議還是用"${}",或者直接用$,來引用變量

字元串要用雙引号引起來

字元串比較一般使用==來做字元串是否相同測試,使用&lt;或者&gt;進行大小比較,在單中括号中對字元進行大于和小于的比較要用轉移\&gt;和\&lt;。比較原理就是對比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 &gt; </code><code>"ABC"</code> <code>]]</code>

<code>[[ -d .</code><code>/aaa</code><code>.sh &amp;&amp; -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>

雙中括号的使用和單中括号的使用規則類似

雙中括号中間字元串的大于小于比較不需要轉義,且字元串可以不用雙引号引用

雙中括号裡面可以使用&amp;&amp;、||做邏輯運算符

雙中括号裡面還可以做模糊比對,使用=~表達式2可以是正規表達式

<code>[ 表達式1 -a 表達式2 ] 等效于 [[ 表達式1 &amp;&amp; 表達式2 ]] 等效于 [ 表達式1 ] &amp;&amp; [ 表達式2 ] 等效于 [[ 表達式1 ]] &amp;&amp; [[ 表達式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&lt;=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,如需轉載請自行聯系原作者