<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無線&移動互聯網技術研發

    換位思考·····
    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    控制流結構——case

    Posted on 2009-11-29 12:05 Gavin.lee 閱讀(304) 評論(0)  編輯  收藏 所屬分類: Linux shell 入門

     

    case語句
    case語句為多選擇語句。可以用case語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令。case語句格式如下:
    Shell代碼
    1. case 值 in   
    2. 模式1 )   
    3.   命令1  
    4.   . . .   
    5.   ;;   
    6. 模式2 )   
    7.   命令2  
    8.   . . .   
    9.   ;;   
    10. esac  


    case工作方式如上所示。取值后面必須為單詞 in,每一模式必須以右括號結束。取值可以為變量或常數。匹配發現取值符合某一模式后,其間所有命令開始執行直至;;

    取值將檢測匹配的每一個模式。一旦模式匹配,則執行完匹配模式相應命令后不再繼續其他模式。如果無一匹配模式,使用星號*捕獲該值,再接受其他輸入。模式部分可能包括元字符,與在命令行文件擴展名例子中使用過的匹配模式類型相同,即:
    * 任意字符。
    任意單字符。
    [..] 類或范圍中任意字符。

    來看一個簡單的case語句:
    Shell代碼
    1. /home/l/g/tomotoboy >cat caseselect   
    2. #!/bin/sh   
    3. #caseselect   
    4. echo - n "Enter a number from 1 to 5 :"  
    5. read ANS   
    6.  case $ANS in   
    7. 1) echo "you select 1"  
    8. ;;   
    9. 2) echo "you select 2"  
    10. ;;   
    11. 3) echo "you select 3"  
    12. ;;   
    13. 4) echo "you select 4"  
    14. ;;   
    15. 5) echo "you select 5"  
    16. ;;   
    17. *) echo "`basename $0`: This is not between 1 and 5" >&2  
    18. ;;   
    19. esac   
    20.   
    21. /home/l/g/tomotoboy >caseselect   
    22. - n Enter a number from 1 to 5 :   
    23. 4  
    24. you select 4  
    25. /home/l/g/tomotoboy >caseselect   
    26. - n Enter a number from 1 to 5 :   
    27. 7  
    28. caseselect: This is not between 1 and 5  


    對匹配模式使用|
    Shell代碼
    1. /home/l/g/tomotoboy >cat caseterm   
    2. #!/bin/sh   
    3. #caseterm   
    4. echo "choices are.. vt100, vt102, vt220"  
    5. echo -n "enter your terminal type :"  
    6. read TERMINAL   
    7.  case $TERMINAL in   
    8.  vt100|vt102) TERM=vt100   
    9.  ;;   
    10.  vt220) TERM=vt220   
    11.  ;;   
    12.  *) echo "`basename $0`: Unknown reponse" >&2  
    13.    echo "setting it to vt100 anyway,so there"  
    14.    TERM=vt100   
    15.  ;;   
    16. esac   
    17. export TERM   
    18. echo "Your terminal is set to $TERM'   
    19. "caseterm" 17 lines, 348 characters   
    20.   
    21. /home/l/g/tomotoboy >caseterm   
    22. choices are.. vt100, vt102, vt220   
    23. -n enter your terminal type :   
    24. vt100   
    25. Your terminal is set to vt100'  

    提示鍵入y或n
    case的一個有效用法是提示用戶響應以決定是否繼續進程。這里提示輸入y以繼續處理n退出。如果用戶輸入Y、y或yes,處理繼續執行case語句后面部分。如果用戶輸入N、n或no或其他響應,用戶退出腳本。
    Shell代碼
    1. /home/l/g/tomotoboy >cat caseans   
    2. #!/bin/sh   
    3. #caseans   
    4. echo -n "Do you wish to proceed [y..n]"  
    5. read ANS   
    6.  case $ANS in   
    7.  y|Y|yes|Yes) echo "yes is selected"  
    8.  ;;   
    9.  n|N|no|No) echo "no is selectd"  
    10.  ;;   
    11.  *) echo "`basename $0` : Unknown response" >&2  
    12.  ;;   
    13.  esac   
    14.   
    15. /home/l/g/tomotoboy >caseans   
    16. -n Do you wish to proceed [y..n]   
    17. y   
    18. yes is selected  


    case與命令參數傳入
    Shell代碼
    1. /home/l/g/tomotoboy >cat >> caseparam   
    2. #!/bin/sh   
    3. #caseparam   
    4. if [ $# != 1 ];then   
    5.    echo "Usage:`basename $0` [start|stop|help]" >&2  
    6. fi   
    7. OPT=$1  
    8. case $OPT in   
    9.  start) echo "starting..`basename $0`"  
    10. ;;   
    11.  stop) echo "stopping..`basename $0`"  
    12. ;;   
    13.  help) echo "stopping..`basename $0`"  
    14.  echo "Usage:`basename $0` [start|stop|help]"  
    15. ;;   
    16.  *) echo "stopping..`basename $0`"  
    17.  echo "Usage:`basename $0` [start|stop|help]"  
    18. ;;   
    19. esac   
    20. /home/l/g/tomotoboy >chmod u+x caseparam   
    21. /home/l/g/tomotoboy >caseparam help   
    22. stopping..caseparam   
    23. Usage:caseparam [start|stop|help]   
    24. /home/l/g/tomotoboy >caseparam start   
    25. starting..caseparam  


    捕獲輸入并執行空命令
    不一定要在匹配模式后加入命令,如果你原本不想做什么,只是在進一步處理前過濾出意外響應,這樣做是一種好辦法。如果要運行對應于一個會計部門的帳目報表,必須首先在決定運行報表的類型前確認用戶輸入一個有效的部門號,匹配所有可能值,其他值無效。用case可以很容易實現上述功能。下面的腳本中如果用戶輸入部門號不是234、453、655或454,用戶退出并返回可用信息。一旦響應了用戶的有效部門號,腳本應用同樣的技術取得報表類型,在case語句末尾顯示有效的部門號和報表類型。腳本如下:
    Shell代碼
    1. #!/bin/sh   
    2. # casevalid   
    3. echo -n "enter the account dept No: "  
    4. read ACC   
    5.  case $ACC in   
    6.       234);;   
    7.       453);;   
    8.       655);;   
    9.       454);;   
    10.          *) echo "basename $01`: Unknon dept No"  
    11.               echo "try..234,453,655,454"  
    12.               exit 1  
    13.               ;;   
    14. esac   
    15. #if we are here, then we have a validdated the dept no   
    16. echo " 1 . post"  
    17. echo " 2 . prior"  
    18. echo -n "enter the type of report: "  
    19. read ACC_TYPE   
    20.    case $ACC_TYPE in   
    21.    1)TYPE=post;;   
    22.    2)TYPE=prior;;   
    23.    *) echo "`basename $0`: Unknown account type." >&2  
    24. "casevalid" 29 lines, 665 characters   
    25. /home/l/g/tomotoboy >casevalid   
    26. -n enter the account dept No:   
    27. 454  
    28.  1 . post   
    29.  2 . prior   
    30. -n enter the type of report:   
    31. 1  
    32. now running report for dept 454 for the type post  
    主站蜘蛛池模板: 成年女人免费v片| 在线免费观看亚洲| 在线观看免费播放av片| 亚洲一区二区三区免费在线观看| 韩国日本好看电影免费看| 亚洲一线产区二线产区精华| 91九色视频无限观看免费| 国产一区二区视频免费| 黄页网站在线视频免费| 亚洲国产中文v高清在线观看| 日亚毛片免费乱码不卡一区| 国产亚洲精品无码专区| 国产一区二区三区免费| 亚洲精品国产福利片| 抽搐一进一出gif免费视频| 毛片A级毛片免费播放| 久久精品国产亚洲av品善| 亚洲国产成人久久综合一区77| 一级毛片在线播放免费| 午夜亚洲国产理论秋霞| 又粗又长又爽又长黄免费视频| 国产亚洲AV夜间福利香蕉149| 久久成人无码国产免费播放| 亚洲一级Av无码毛片久久精品| a级男女仿爱免费视频| 亚洲六月丁香六月婷婷色伊人| 免费理论片51人人看电影| 人成午夜免费大片在线观看| 久久精品国产亚洲一区二区| 性短视频在线观看免费不卡流畅| 亚洲国产a∨无码中文777| 黄色免费网站网址| 亚洲精品在线观看视频| 成年女人毛片免费播放人| 国产成人无码免费看片软件| 国产在线a不卡免费视频| 亚洲精华国产精华精华液好用| 台湾一级毛片永久免费| 亚洲白色白色永久观看| 日韩精品电影一区亚洲| 色片在线免费观看|