shell腳本-循環選擇語句

過程式編程語言:
順序執行
選擇執行
循環執行
注:條件中的變量,能夠在執行語句中使用,不用在加上"$"。sql

if語句

根據命令的退出狀態來執行命令
    單分支
        if  判斷條件;then
            條件爲真的分支代碼
        fi
    雙分支
        if  判斷條件; then
            條件爲真的分支代碼
        else
            條件爲假的分支代碼
        fi
    多分支
        if  判斷條件 1 ; then
            條件爲真的分支代碼
        elif  判斷條件 2 ; then
            條件爲真的分支代碼
        elif  判斷條件 3 ; then
            條件爲真的分支代碼
        else
            以上條件都爲假的分支代碼
        fi
        逐條件進行判斷,第一次遇爲「真」條件時,執行其分支,然後結束整個if 語句

case 語句

case用法:
        case 變量引用 in
        PAT1)
            分支1
            ;;
        PAT2)
            分支2
            ;;
            ...
        *)
            默認分支
            ;;
        esac
    case 支持glob 風格的通配符:
        *:  任意長度任意字符
        ?:  任意單個字符
        []:指定範圍內的任意單個字符
        a|b: a 或b

for語句

for  變量名 in 列表;do
        循環體
    done
        依次將列表中的元素賦值給「變量名」; 每次賦值後即執行一次循環體;  直到列表中的元素耗盡,循環結束。
    or
    for ((exp1;exp2;exp3)); do
        COMMANDS
    done
        控制變量初始化:僅在運行到循環代碼段時執行一次
        控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算,然後再作條件判斷
    列表生成方式:
        直接給出列表
        整數列表:
            (a) {start..end}
            (b) $(seq [start [step]] end)==` `
        返回列表的命令
            $(COMMAND)
        使用glob,如:*.sh
        變量引用;
            $@, $*

while語句

while CONDITION; do
        循環體
    done
    CONDITION:
        循環控制條件,進入循環以前,先作一次判斷,每一次循環以後會再次作判斷。
        條件爲"true" ,則執行一次循環,直到條件測試狀態爲"false" 終止循環。
        CONDTION 通常應該有循環控制變量,而此變量的值會在循環體不斷地被修正。
    進入條件:
        CONDITION 爲true
    退出條件:
        CONDITION 爲false
    特殊用法
        遍歷文件的每一行
        while read line(任意); do
            循環體
        done < /PATH/FROM/SOMEFILE
        or
        命令、文件或其餘(標準輸出) |while read line; do
            循環體
        done 
        依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line

until語句

until CONDITION; do
        循環體
    done
    CONDITION:
        循環控制條件,進入循環以前,先作一次判斷,每一次循環以後會再次作判斷。
        條件爲"false" ,則執行一次循環,直到條件測試狀態爲"true" 終止循環。
        CONDTION 通常應該有循環控制變量,而此變量的值會在循環體不斷地被修正。
    進入條件: 
        CONDITION  爲false
    退出條件: 
        CONDITION  爲true

控制語句

continue
        用於循環體中,直接繼續下個循環。
        continue [N],提早結束第N層的本輪循環,而直接進入下一輪判斷,最內層爲第1層。
    break
        用於循環體中,退出整個循環。
        break [N],提早結束第N層循環,最內層爲第1層。
    shift
        用於將參量列表list左移指定次數,缺省爲左移一次。
        shift [n],移動N個位置,參量列表list 一旦被移動,最左端的那個參數就從列表中刪除。
        while 到循環遍歷位置參量列表時,經常使用到 shift。
            $1=a,  $2=b,  $c=d
            shift
            $1=b,  $2=d
            shift
            $1=d
    wait
        用於等待命令執行結束,並exit 退出

select語句

select 變量名 in LIST ; do
        循環體命令
    done
    select 循環主要用於建立菜單,按數字順序排列的菜單項將顯示在標準錯誤上,並顯示 PS3 提示符,等待用戶輸入。
    用戶輸入菜單列表中的某個數字,執行相應的命令。
    用戶輸入被保存在內置變量 REPLY中。
        PS3="INPUT:"
        select menu in bai hei hong lv;do
            echo $menu
        done
    selectcase的對比
        select 是個無限循環,所以要記住用 break令退出循環,或用 exit命令終止腳本,也能夠按 ctrl+c退出循環。
        select 常常和 case 聯合使用
        與for循環相似,能夠省略in LIST,此時使用位置參量。

trap信號捕捉

trap ' 觸發指令'  信號
        自定義進程收到系統發出的指定信號後,將執行觸發指令,而不會執行原操做。
    trap ' '  信號
        忽略信號的操做
    trap '-'  信號
        恢復原信號的操做
    trap -p
        列出自定義信號操做
    trap 示例
        #!/bin/bash
        trap 'echo 「signal:SIGINT"' int
        trap -p
        for((i=0;i<=10;i++))
        do
                sleep 1
                echo $i
        done
        trap '' int
        trap -p
        for((i=11;i<=20;i++))
        do
                sleep 1
                echo $i
        done
        trap '-' int
        trap -p
        for((i=21;i<=30;i++))
        do
                sleep 1
                echo $i
        done
相關文章
相關標籤/搜索