天天看點

Shell中小括号的用法

小括号():

1.括号中的指令将會新開一個子shell順序執行,是以括号中的變量不能夠被腳本餘下的部分使用。括号中多個指令之間用分号隔開,最後一個指令可以沒有分号,各指令和括号之間不必有空格.

2.得到指令輸出——a=$(command), 等同于a=$`command`,得到指令輸出傳遞給變量a

3.初始化數組——array=(a b c d),中間全部以空格為分隔符,很類似于數組.

第一條用法:

錯誤了解用法示例:

注意:想着括号可以執行多個指令,嘗試()多個指令之間空格,加單引号等都沒能成功,下面這樣寫也隻執行了第一個指令.

1

2

3

4

5

6

7

<code>[root@sh-proxy2 ~]</code><code># cat test.sh </code>

<code>#!/bin/bash</code>

<code>arry=$(</code><code>ls</code> <code>/usr/local/</code><code>;</code><code>ls</code> <code>/tmp</code><code>)</code>

<code>for</code> <code>i </code><code>in</code> <code>${arry[@]}</code>

<code>do</code>

<code>    </code><code>echo</code> <code>$i</code>

<code>done</code>

<code>[root@sh-proxy2 ~]</code><code># ls /usr/local/ | wc -l</code>

<code>10</code>

<code>[root@sh-proxy2 ~]</code><code># sh test.sh | wc -l</code>

---------------------------------------------------------------------------------

正确用法:

測試腳本内容:

8

<code>arry=cweb14</code>

<code>for</code> <code>i </code><code>in</code> <code>$(arry=</code><code>'cweb17'</code><code>;</code><code>echo</code> <code>${arry})</code>

<code>    </code><code>echo</code> <code>$arry</code>

腳本執行的過程:

9

<code>[root@sh-proxy2 ~]</code><code># sh -x test.sh </code>

<code>+ arry=cweb14</code>

<code>++ arry=cweb17</code><code>#單開了一個子shell在運作.</code>

<code>++ </code><code>echo</code> <code>cweb17</code>

<code>+ </code><code>for</code> <code>i </code><code>in</code> <code>'$(arry='</code><code>\</code><code>''</code><code>cweb17</code><code>'\''</code><code>;</code><code>echo</code> <code>${arry})'</code>

<code>+ </code><code>echo</code> <code>cweb14</code>

<code>cweb14</code>

<code>+ </code><code>echo</code> <code>cweb17</code>

<code>cweb17</code>

運作的結果:

<code>[root@sh-proxy2 ~]</code><code># sh test.sh </code>

第二條用法示例:

10

<code>[root@puppet ~]</code><code># ls /usr/local/</code>

<code>bin  etc  games  include  lib  lib64  libexec  sbin  share  src</code>

<code>[root@puppet ~]</code><code># cat test.sh </code>

<code>a=6</code>

<code>arry=$(</code><code>ls</code> <code>/usr/local</code><code>)</code><code>#小括号中執行的是shell指令.</code>

注釋:用for循環列出了數組中元素的值.變量arry擷取值後已經是數組.

運作結果:

11

<code>[root@puppet ~]</code><code># sh test.sh </code>

<code>bin</code>

<code>etc</code>

<code>games</code>

<code>include</code>

<code>lib</code>

<code>lib64</code>

<code>libexec</code>

<code>sbin</code>

<code>share</code>

<code>src</code>

------------------------------------------------------------------------------

第二條的另一種用法:

mysql指令輸出2個值.

<code>[root@sh-proxy2 ~]</code><code># mysql -e "show slave status\G"|grep -E "Slave_IO_Running|Slave_SQL_Running:"|awk '{print $2}'</code>

<code>No</code>

<code>Yes</code>

腳本循環變量的值.

<code>arry=($(mysql -e </code><code>"show slave status\G"</code><code>|</code><code>grep</code> <code>-E </code><code>"Slave_IO_Running|Slave_SQL_Running:"</code><code>|</code><code>awk</code> <code>'{print $2}'</code><code>))</code>

<code>echo</code> <code>$arry</code>

注釋:$()意思 ()中執行指令,$()擷取指令值,然後外面再()就是初始化$()的值.

第三條用法:

<code>arry=(1 2 3 4 $a)</code>

<code>echo</code> <code>$i</code>

注釋:小括号中數組的元素可以是變量不影響,初始化數組.

<code>1</code>

<code>2</code>

<code>3</code>

<code>4</code>

<code>6</code>

本文轉自青衫解衣 51CTO部落格,原文連結:http://blog.51cto.com/215687833/1980639