bash 的過程式和循環式編寫

        bash腳本的編寫,對於Linux這個多用戶,多任務的系統,有很大的幫助,腳本可以幫助我們定時執行任務,過濾文本,檢查系統性能等等。下面我們來了解一下過程式和循環式腳本的編寫。


使用read 命令來接受輸入

使用read 來把輸入值分配給一個或多個shell 變量:

    -p 指定要顯示的提示

    -t TIMEOUT

read 從標準輸入中讀取值,給每個單詞分配一個變量,所有剩餘單詞都被分配給最後一個變量。

read -p “Enter a filename: “ FILE


過程式編程語言分爲三種:1.順序執行 2.選擇執行 3.循環執行


條件選擇if 語句

    選擇執行:

    注意:if 語句可 嵌套

    單分支

        if  判斷條件:then

            條件爲真的分支代碼

        fi

    雙分支

        if  判斷條件; then

            條件爲真的分支代碼

        else

            條件爲假的分支代碼

        fi

    多分支

        if  CONDITION1 ; then

            if-true

        elif CONDITION2 ; then

            if-true

        elif CONDITION3 ; then

            if-true

            ...

        else

            all-false

        fi

逐條件進行判斷,第一次遇爲“真”條件時,執行其分支,而後結束整個if 語句。

if 實例

1 、寫一個腳本/root/bin/createuser.sh ,實現如下功能:使用一個用戶名做爲參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id 號等信息

wKiom1e6WJmwaYRVAAAtZF-XPdQ933.png-wh_50

wKioL1e6WJnyNgdoAAAVxgyz59s505.png-wh_50



條件判斷:case 語句

case 變量引用 in

PAT1)

    分支1

    ;;

PAT2)

    分支2

    ;;

...

*)

    默認分支

    ;;

esac

case 支持glob 風格的通配符:

*:  任意長度任意字符

?:  任意單個字符

[] :指定範圍內的任意單個字符

a|b:  a或b

case 實例

1,寫一個腳本/root/bin/yesorno.sh ,提示用戶輸入yes或no, 並判斷用戶輸入的是yes還是no,

wKioL1e6V2iweDW1AAAZXeeYaU4038.png-wh_50

wKioL1e6V2nB-UQQAAAiYK0Exyk464.png-wh_50




循環執行:將某代碼段重複運行多次

    重複運行多少次:

        循環次數事先已知

        循環次數事先未知

    有進入條件和退出條件

分爲三種:for, while, until


for 循環

for  變量名 in  列表;do    (for的變量名可以不用加$符號)

    循環體

done

執行機制 : 依次將列表中的元素賦值給“變量名“; 每次賦值後即執行一次循環體;  直到列表中的元素耗盡,循環結束。

列表生成方式:

    (1)  直接給出列表

    (2)  整數列表:

        (a) {start..end}

        (b) $(seq [start [step]] end)

    (3)  返回列表的命令

        $(COMMAND)

    (4)  使用glob,如:*.sh

    (5)  變量引用;

        $@, $*

for實例

1,用for編寫一個99乘法表。

wKiom1e6ZA2iUSDUAAAT1PTOKk4866.png-wh_50

wKioL1e6ZA2SPf03AAAgpDgpP-4279.png-wh_50


while 循環

while CONDITION; do

    循環體

done

CONDITION :循環控制條件;進入循環之前,先做一次判斷;每一次循環之後會再次做判斷;條件爲“true",則執行一次循環;直到條件測試狀態爲“false”終止循環.

因此:CONDTION 一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正

進入條件:CONDITION 爲true;(真)

退出條件:CONDITION 爲false ;(假)

while實例

1,用while編寫一個99乘法表。

wKioL1e6ZHOhXEr2AAAUhpYhliw755.png-wh_50

wKiom1e6ZHPQtYb_AAAgz253OhU500.png-wh_50


until 循環

until CONDITION; do

    循環體

done

進入條件: CONDITION  爲false (假)

退出條件: CONDITION  爲true(真)

wKiom1e6bePA3C9OAAAyIZYnwHU444.png-wh_50

wKioL1e6beOgSckhAAAbfSMaBPI252.png-wh_50


循環控制語句continue :用於循環體中

continue [N] :提前結束第N 層的本輪循環,而直接進入下一輪判斷;最內層爲第1層。

while CONDTIITON1; do

    CMD1

    ...

    if CONDITION2; then

        continue

    fi

    CMDn

    ...

done

wKiom1e6cWWDtz8JAAAQCOh9gE4050.png-wh_50

wKioL1e6cWXgEPNfAAAPy1smiTY847.png-wh_50


循環控制語句break:用於循環體中

break [N] :提前結束第N 層循環, 最內層爲第1層。

while CONDTIITON1; do

    CMD1

    ...

    if CONDITION2; then

        break

    fi

    CMDn

    ...

done

wKiom1e6coSSIXnjAAARKRovgxg992.png-wh_50

wKioL1e6coTxsOLRAAAL4q-CcZQ605.png-wh_50

循環控制語句exit:用於循環體中

exit :直接結束整個循環,後面的不再執行。

wKioL1e6cw_iuhhFAAAQNnwoOOM899.png-wh_50

wKiom1e6cw-Tg211AAALmnmxMKw221.png-wh_50


創建無限循環

while true; do

    循環體

done

wKiom1e6dMvSOKaZAAAL147DJkg055.png-wh_50

wKioL1e6dMzwUCRzAAAMs1ZsRAI457.png-wh_50

until false; do

    循環體

Done

wKiom1e6dPWD3mafAAALkdUrOW4782.png-wh_50

wKioL1e6dPbBCMOrAAAMlJCzsrw846.png-wh_50


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章