Linux Bash Shell學習(十一):流程式控制制——case

來源:互聯網
上載者:User

  本文也即《Learning the bash Shell》3rd Edition的第五章Flow Control之讀書筆記之三,但我們將不限於此。flow control是任何程式設計語言中很常用的部分,也包括了case。在這裡,我們將繼續學習他們。

  case通過檢測字串的樣式是否匹配,數目是否相等,進行相應不同的處理。將if-then-else的結構修改為更好的閱讀方式,格式如下:

case expression 
in

    pattern1  )

        statements
;;

    pattern2  )

        statements
;;

    ...

esac


  看看最後標明的結束的esac,以及if/else中的fi,都是反過來寫,這可能是bash的一個特色。注意statement後面是兩個分號。任何一個樣式都可以包含多個樣式,他們之間用“|”來分割,如果匹配其中的一個,就執行statement。case將將按順序依次進行檢查,直至匹配。下面是一個例子,對不同尾碼結尾的圖片檔案做不同的處理。我們不要具體如何處理,主要看看case的使用方式。

for filename in "$@"; do

    case
$filename in

        *.jpg )
exit 0 ;;

        *.tga ) 
<do statement>;;

        *.xpm )
<do statement>

;;

        *.pcx )
<do statement>

;;

        *.tif )
<do statement>

;;

        *.gif )
<do statement>

;;

            * )
echo "procfile: $filename is an unknown graphics file."

                exit 1 ;;

    esac

done

  在其他進階變成語言中,例如C語言,常用switch的方式,他們都有一個default的選項,表示如果上面均不匹配時的處理方法,在bash中可以在最後*)進行同樣的處理。下面來閱讀另外一個例子。

cd( )

{

    # 檢查寫但參數的數目,分別對0或1個參數,2個參數,其他進行處理

    case
"$#" in

        # 如果有1個或者0個參數,採用原有cd的處理方式,注意|的使用,表示這兩種情況之一匹配即可。

        0 | 1) 
builtin cd $1 ;;

        # 對於2個參數,將當前路徑所有匹配參數1樣式的字串更換為樣式2,並跳到新的路徑中

        2    )
newdir=${PWD//$1/$2}

                # 這裡給了一個case嵌套的例子。如果更換的路徑和原來一樣,即沒有變化的處理,以及其他(即有更改)的處理。


                case "$newdir" in

                    $PWD)   echo "bash: cd: bad substitution" >&2 ;

                        return 1 ;;

                    *   )   builtin cd "$newdir" ;;

                esac ;;



        # 對參數多與2個處理。

        *    )  echo "bash: cd: wrong arg count" 1>&2 ; return 1 ;;

    esac

}

相關連結:
我的Linux操作相關文章

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.