<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 閱讀(382) 評論(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]匹配任一非數字型字符。
    主站蜘蛛池模板: 亚洲免费视频播放| 国产精品亚洲玖玖玖在线观看| 国产免费一区二区三区| 成人免费无码大片A毛片抽搐色欲 成人免费无码大片a毛片 | 日韩精品成人无码专区免费 | 黄色网页免费观看| 99re6免费视频| 久久久国产精品亚洲一区| 久久精品免费电影| 亚洲激情在线视频| 久久久久久精品免费看SSS | 亚洲天堂免费在线视频| 一区免费在线观看| 亚洲精品无码久久久久| 亚洲国产精品无码第一区二区三区 | 国产成人亚洲精品影院| 国产一级一毛免费黄片| 麻豆亚洲AV永久无码精品久久| 中文字幕亚洲免费无线观看日本| 亚洲成综合人影院在院播放| 久久久www成人免费毛片| 国产精品亚洲综合一区在线观看 | 韩国18福利视频免费观看| 香港特级三A毛片免费观看| 一本色道久久综合亚洲精品高清| 久久精品成人免费观看| 99亚偷拍自图区亚洲| 久久免费国产视频| 色噜噜亚洲男人的天堂| 久久精品国产免费观看三人同眠| 天天爽亚洲中文字幕| 亚洲黄片手机免费观看| 免费人成视频在线观看网站| 亚洲精品无码久久久久YW| 国产免费不卡v片在线观看 | 亚洲GV天堂GV无码男同| 国产亚洲色视频在线| 青青草a免费线观a| 亚洲色欲色欲www| 国产成人亚洲精品狼色在线 | 亚洲乱码中文字幕综合234|