天天看點

Shell基礎文法(下)

for語句

基本格式:

for 變量名 in 條件; do …; done

樣例:周遊目錄或檔案

1

2

3

4

5

6

7

8

9

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

<code>cd</code> <code>/etc/</code>                 <code>##腳本中如果查詢的目錄在多級目錄下,首先要進入到目錄,或者,直接跟絕對路徑</code>

<code>for</code> <code>a </code><code>in</code> <code>`</code><code>ls</code> <code>/etc/</code><code>`      </code><code>##周遊目錄</code>

<code>do</code>

<code>    </code><code>if</code> <code>[ -d $a ]         </code><code>##一個一個的去判斷是否為目錄</code>

<code>    </code><code>then</code>

<code>    </code><code>ls</code> <code>-d $a             </code><code>##如果是目錄,就檢視下目錄内的檔案和子目錄</code>

<code>    </code><code>fi</code>

<code>done</code>

while語句

while 條件; 

do … ;

done

樣例:實時監測負載發郵件

10

<code>while</code> <code>:         </code><code>##:表示永遠循環,和true一個意思</code>

<code>    </code><code>load=`w|</code><code>head</code> <code>-1|</code><code>awk</code> <code>-F </code><code>'load average: '</code> <code>'{print $2}'</code><code>|</code><code>cut</code> <code>-d. -f1`</code>

<code>if</code> <code>[ $load -gt 10 ]</code>

<code>then</code>

<code>    </code><code>top</code><code>|mail -s </code><code>"load is high: $load"</code> <code>[email protected]  </code><code>##這裡也可以執行python發郵件的腳本</code>

<code>fi</code>

<code>sleep</code> <code>30</code>

break

跳出整個循環,執行循環代碼後的指令。

continue

跳過本次循環,進行下一輪循環。

exit

退出整個腳本。

函數

function fun(){    ##定義函數

……         

}

fun 1 2 3          ##傳入參數,調用函數

變量含義:

$1 : 第一個參數

$2 : 第二個參數

$3 : 第三個參數

$0 : 腳本的本身名稱

$# : 傳入的參數個數

$@ : 全部參數

樣例:檢視網卡ip位址

<code>ip() {</code>

<code>    </code><code>ifconfig</code> <code>| </code><code>grep</code> <code>-A1 </code><code>"$e"</code> <code>|</code><code>tail</code> <code>-1 | </code><code>awk</code> <code>'{print $2}'</code>

<code>}</code>

<code>read</code> <code>-p </code><code>"Please input the eth name: "</code> <code>e</code>

<code>myip=`ip $e`</code>

<code>echo</code> <code>"$e address is $myip"</code>

數組

定義:

11

<code># a=(1 2 3)          ##定義一個數組a并指派 1 2 3</code>

<code># echo ${a[*]}       ##注意輸出a的值的格式</code>

<code>1 2 3</code>

<code># echo ${a[1]}       ##輸出單個a數組中的值</code>

<code>2</code>

<code># echo ${a[2]}</code>

<code>3</code>

<code># echo ${a[0]}       ##注意第一個其實是 0</code>

<code>1</code>

<code># echo ${#a[@]}      ##擷取數組的元素個數</code>

更改:

<code># a[3]=a         ##給第三個數組指派一個a</code>

<code># echo ${a[*]}</code>

<code>1 2 3 a</code>

<code># a[3]=aaa       ##修改指派為aaa</code>

<code>1 2 3 aaa</code>

<code>#echo ${a[@]/5/asd}  ##替換</code>

<code>1 2 3 4 asd 6 7 8</code>

删除:

<code># unset a[2]         ##删除a數組中第2位的值</code>

<code># unset a            ##删除a數組</code>

分片:

<code># a=(`seq 1 8`)          ##給a指派8個數</code>

<code>1 2 3 4 5 6 7 8</code>

<code># echo ${a[@]:3:3}       ##從第3個數組開始,截取3個。</code>

<code>4 5 6</code>

<code># echo ${a[@]:0-3:2}     ##從倒數第三個開始,取兩個數</code>

<code>6 7</code>

<code></code>

本文轉自Grodd51CTO部落格,原文連結:http://blog.51cto.com/juispan/2064850,如需轉載請自行聯系原作者