天天看點

shell腳本的編寫

shell腳本的編寫:

1、bash的算術運算:bash不支援浮點型,取圓整(丢失小數點後的數值)

使bash執行算術運算必須按照以下格式書寫:1、let 算術表達式   2、$[算術表達式]    3、$((算術表達式))

若變量一次步進幅度為1則可以寫作:SUM++ | ++SUM  ,SUM-- | --SUM

2、bash中的語句邏輯運算:

&&與運算  語句1&&語句2  語句1假便不在執行語句2

||或運算  語句1||語句2    語句1真便不在執行語句2

!非運算  !語句

在bash中邏輯與,與邏輯或稱作短路操作符,既是隻計算前面的語句

3、bash中的條件測試:

測試的表達式:

[ condition ]    作為指令

` condition `    shell中的關鍵字

test condition    

(1)、整數測試:

-eq:等于  -gt:大于  -ge:大于等于  -lt:小于  -le:小于等于  -ne:不等于

例如: #test $A -eq $B

#A=40

#B=60

# [ $A -ge $B ] && echo "$A is the max number" || echo "$B is the max number"

(2)、字元串測試:

==:内容一樣,做測試條件  !=:内容不一樣   -z:是否為空,空為真,非空為假   -n:是否不為空,空為假,非空為真    

例如:#[ -z "$A" ] && echo "A is null." || echo "A is not null!"

#[ "$A" = "$B" ] && echo "Yiyang" || echo "Not yiyang!"    

(3)、檔案測試

-e FILE        檔案是否存在,存在為真,不存在為假

-f FILE        是否為普通檔案

-d FILE        是否為目錄

-h/-L FILE    是否為軟連接配接

-b FILE        是否為塊裝置

-c FILE        是否為字元裝置

-r FILE     目前使用者對檔案是否有讀權限

-w FILE        寫權限

-x FILE        執行權限

例如:#[ -e /tmp/scripts ] && [ -d /tmp/scripts ] && mkdir /tmp/scripts

4、sed:stream editor行編輯器:非互動式編輯器,沒有破壞性,sed的工作模式是将檔案的原内容拷貝到自己的模式空間中,對複制出的這份内容進行操作,并非對原内容進行操作,是以沒有破壞性。

格式:sed "搜尋内容command" inputfile,非互動式,将處理後的資料顯示在螢幕上

搜尋範圍:/PATTERN/command    #sed '/\<de.\{5\}\>/,/\<in\>/d' even.sh

    /PATTERN1,/PATTERN2command     第一次符合PATTERN1到第一次符合PATTERN2的行

參數:d    删除行(例如:#sed‘5d’ even.sh)

    p    顯示比對到的内容所在的行

    -n    隻顯示被模式比對到的内容

    a\    在比對到内容的行下面添加一行或多行    #sed '3,5a\This is a new line' even.sh

    i\    在其行上面添加一行或多行    \nThis is second line

    !    對比對條件取反

*    s    sed 'ADDR1,ADDR2s@from@to@g'

    -e    sed -e '' -e '' -e '' inputfile    連接配接多個處理機制(例如:

sed -e '1,$s@ /.*/   \(/\)\{1\} @ \1 -e '/d' )

    -i    直接修改原檔案

    -f    從另外的檔案讀取sed的處理機制并且對檔案進行執行

5、for語句,其循環方式是周遊循環

格式:for 變量 in 清單;do

    語句1;

    語句2;

    ……

    done

而在for循環中定義循環清單可以分為:簡單列出、{1..20}(從1到20)、`seq 1 2 10`(從1開始每次加2循環到10)

如:計算100所有能被3整除的數的和

<a target="_blank" href="http://blog.51cto.com/attachment/201202/214755423.jpg"></a>

如:計算100以内所有偶數的和

<a target="_blank" href="http://blog.51cto.com/attachment/201202/214835694.jpg"></a>

6、while語句,其循環方式為隻要條件滿足就一直循環下去,否則将跳出循環

格式:while 條件;do

    語句1

    語句2

如:提醒使用者輸入一個使用者名,如果使用者輸入的為空,則一直提醒其輸入。

<a target="_blank" href="http://blog.51cto.com/attachment/201202/215242415.jpg"></a>

7、until語句,其循環方式和while正好相反,隻要條件不滿足則循環下去,否則将跳出循環

格式:until 條件;do

8、if語句:分為單分支、雙分支、多分支

單分支:if 測試條件;then

        語句

        ……

    fi

如:建立目錄/tmp/maintenance,如果存在就删除後在建立。

<a target="_blank" href="http://blog.51cto.com/attachment/201202/214913300.jpg"></a>

雙分支:if 測試條件;then

    else

多分支:if 測試語句1;then

    elif 測試語句2;then

    elif 測試語句3;then

如:檢查/var/log下的所有檔案,如果是普通檔案就輸出為普通檔案,如果是目錄就輸出是目錄,其他的則輸出unknow。

<a target="_blank" href="http://blog.51cto.com/attachment/201202/215001827.jpg"></a>

當腳本書寫完成之後:1、使用bash -n SCRIPTFILE檢查腳本檔案是否含有錯誤。2、使用bash SCRIPTFILE執行腳本檔案,或者給腳本檔案加上執行權限,直接對腳本檔案進行執行!

本文轉自 向陽草米奇 51CTO部落格,原文連結:http://blog.51cto.com/grass51/776753,如需轉載請自行聯系原作者