<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    shell函數

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

     

    函數由兩部分組成:
    • 函數標題。
    • 函數體。

    標題是函數名。函數體是函數內的命令集合。標題名應該唯一;如果不是,將會混淆結,因為腳本在查看調用腳本前將首先搜索函數調用相應的 s h e l l。
    定義函數的格式為:
    Shell代碼
    1. 函數名()   
    2. {    
    3. 命令1  
    4. . . .   
    5. }   
    6. 或者   
    7. function 函數名()   
    8. {   ...   
    9. }  


    兩者方式都可行。如果愿意,可在函數名前加上關鍵字function,這取決于使用者。

    創建函數文件
    下面創建包容函數的函數文件并將之載入shell,進行測試,再做改動,之后再重新載入。
    函數文件名為functions.main,內容如下
    Shell代碼
    1. #!/bin/sh   
    2. #functions.main   
    3. #   
    4. #findit: this is front end for the basic find command   
    5. findit() {   
    6. #findit   
    7. if [ $# -lt 1 ]; then   
    8. echo "usage : findit file"  
    9. return 1;   
    10. fi   
    11. find . -name $1 -print   
    12. }  
    定位文件
    定位文件格式為:
    . /pahname/filename
    現在文件已經創建好了,要將之載入shell,試鍵入:
    $. functions.main
    如果返回信息file not found,再試:
    $. /functions.main
    此即<點> <空格> <斜線> <文件名>,現在文件應該已載入shell。如果仍有錯誤,則應該仔細檢查是否鍵入了完整路徑名

    檢查載入函數
    使用set命令確保函數已載入。set命令將在shell中顯示所有的載入函數。
    Shell代碼
    1. /home/l/g/tomotoboy/function >. function.main   
    2. /home/l/g/tomotoboy/function >set   
    3. ……   
    4. _=function.main   
    5. findit ()   
    6. {   
    7.     if [ $# -lt 1 ]; then   
    8.         echo "usage : findit file";   
    9.         return 1;   
    10.     fi;   
    11.     find . -name $1 -print   
    12. }  
    執行shell函數
    要執行函數,簡單地鍵入函數名即可。這里是帶有一個參數的 findit函數,參數是某個文件
    Shell代碼
    1. /home/l/g/tomotoboy/function >cd .   
    2. /home/l/g/tomotoboy/function >cd ..   
    3. /home/l/g/tomotoboy >findit sed.txt   
    4. ./testdirec/sed.txt   
    5. ./sed.txt  


    刪除shell函數
    現在對函數做一些改動。首先刪除函數,使其對shell不可利用。使用unset命令完成此功能。刪除函數時unset命令格式為:
    unset  function_name
    $unset findit
    如果現在鍵入set命令,函數將不再顯示。
    Shell代碼
    1. /home/l/g/tomotoboy >unset findit   
    2. /home/l/g/tomotoboy >set   
    3. ……   
    4. _=findit   
    5. /home/l/g/tomotoboy >findit sed.txt   
    6. -bash: findit: command not found  


    再次定位函數
    Shell代碼
    1. /home/l/g/tomotoboy >. function/function.main   
    2. /home/l/g/tomotoboy >findit sed.txt   
    3. ./testdirec/sed.txt   
    4. ./sed.txt  

    如果函數將從測試結果中反饋輸出,那么使用替換命令可保存結果。函數調用的替換格式為:
    variable_name = variable_name
    函數function_name輸出被設置到變量variable_name中。
    Shell代碼
    1. char_name(){   
    2. # char_name   
    3. # to call: char_name string   
    4. # assign the argument across to new variable   
    5. _LETTER_ONLY=$1  
    6. # user awk to test for character only!   
    7. _LETTER_ONLY=`echo $1|awk '{if ($0~/[^a-z A-Z]/) print 1}'`   
    8. if [ "$_LETTER_ONLY" != "" ]   
    9. then   
    10.     # oops  errors   
    11.     return 1  
    12. else   
    13.     # constains only chars   
    14.     return 0  
    15. fi   
    16. }  

    Shell代碼
    1. if char_name $F_NAME; then   
    2.  echo "OK"  
    3. else   
    4.   echo "ERROR"  
    5. fi  
    測試一下
    Shell代碼
    1. /home/l/g/tomotoboy/function >char_name hello   
    2. /home/l/g/tomotoboy/function >echo $?   
    3. 0  
    注意^符號的使用,當直接用在第一個括號里,意指否定或不匹配括號里內容。[^a-z A-Z] 匹配任一非字母型字符,而[^0-9]匹配任一非數字型字符。
    主站蜘蛛池模板: 亚洲国产精品无码专区| 久久久久亚洲精品中文字幕| 亚洲国产成人精品电影| 9久热精品免费观看视频| 精品国产人成亚洲区| 免费无码AV一区二区| 亚洲综合色在线观看亚洲| 男人和女人高潮免费网站| 亚洲成?Ⅴ人在线观看无码| 免费一级毛片在线播放放视频| 日韩免费观看的一级毛片| 亚洲1区2区3区精华液| 国产在线观看免费完整版中文版| 亚洲aⅴ无码专区在线观看| 又黄又爽一线毛片免费观看| 一级做a免费视频观看网站| 国产av无码专区亚洲av果冻传媒 | 亚洲国产精品精华液| 免费毛片网站在线观看| 性色av免费观看| 亚洲性色AV日韩在线观看| 国产极品粉嫩泬免费观看 | 4444亚洲国产成人精品| 亚洲kkk4444在线观看| 青青草国产免费国产是公开| 相泽亚洲一区中文字幕| 成人电影在线免费观看| 亚洲无成人网77777| 在线jyzzjyzz免费视频| 一级特级女人18毛片免费视频| 国产偷v国产偷v亚洲高清| 亚洲黄色免费在线观看| 亚洲精品女同中文字幕| 狠狠亚洲婷婷综合色香五月排名| 在线成人精品国产区免费| 亚洲视频一区二区三区四区| avtt亚洲天堂| 中文字幕视频免费在线观看| 亚洲一区二区女搞男| 中文毛片无遮挡高潮免费| 春暖花开亚洲性无区一区二区 |