<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    shell函數(shù)

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

     

    函數(shù)由兩部分組成:
    • 函數(shù)標(biāo)題。
    • 函數(shù)體。

    標(biāo)題是函數(shù)名。函數(shù)體是函數(shù)內(nèi)的命令集合。標(biāo)題名應(yīng)該唯一;如果不是,將會(huì)混淆結(jié),因?yàn)槟_本在查看調(diào)用腳本前將首先搜索函數(shù)調(diào)用相應(yīng)的 s h e l l。
    定義函數(shù)的格式為:
    Shell代碼
    1. 函數(shù)名()   
    2. {    
    3. 命令1  
    4. . . .   
    5. }   
    6. 或者   
    7. function 函數(shù)名()   
    8. {   ...   
    9. }  


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

    創(chuàng)建函數(shù)文件
    下面創(chuàng)建包容函數(shù)的函數(shù)文件并將之載入shell,進(jìn)行測(cè)試,再做改動(dòng),之后再重新載入。
    函數(shù)文件名為functions.main,內(nèi)容如下
    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
    現(xiàn)在文件已經(jīng)創(chuàng)建好了,要將之載入shell,試鍵入:
    $. functions.main
    如果返回信息file not found,再試:
    $. /functions.main
    此即<點(diǎn)> <空格> <斜線> <文件名>,現(xiàn)在文件應(yīng)該已載入shell。如果仍有錯(cuò)誤,則應(yīng)該仔細(xì)檢查是否鍵入了完整路徑名

    檢查載入函數(shù)
    使用set命令確保函數(shù)已載入。set命令將在shell中顯示所有的載入函數(shù)。
    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. }  
    執(zhí)行shell函數(shù)
    要執(zhí)行函數(shù),簡(jiǎn)單地鍵入函數(shù)名即可。這里是帶有一個(gè)參數(shù)的 findit函數(shù),參數(shù)是某個(gè)文件
    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函數(shù)
    現(xiàn)在對(duì)函數(shù)做一些改動(dòng)。首先刪除函數(shù),使其對(duì)shell不可利用。使用unset命令完成此功能。刪除函數(shù)時(shí)unset命令格式為:
    unset  function_name
    $unset findit
    如果現(xiàn)在鍵入set命令,函數(shù)將不再顯示。
    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  


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

    如果函數(shù)將從測(cè)試結(jié)果中反饋輸出,那么使用替換命令可保存結(jié)果。函數(shù)調(diào)用的替換格式為:
    variable_name = variable_name
    函數(shù)function_name輸出被設(shè)置到變量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  
    測(cè)試一下
    Shell代碼
    1. /home/l/g/tomotoboy/function >char_name hello   
    2. /home/l/g/tomotoboy/function >echo $?   
    3. 0  
    注意^符號(hào)的使用,當(dāng)直接用在第一個(gè)括號(hào)里,意指否定或不匹配括號(hào)里內(nèi)容。[^a-z A-Z] 匹配任一非字母型字符,而[^0-9]匹配任一非數(shù)字型字符。
    主站蜘蛛池模板: 又黄又爽的视频免费看| 黄页免费的网站勿入免费直接进入| 精品久久久久久久免费人妻| 亚洲精品中文字幕无乱码麻豆| 国产成人精品免费视频动漫| 亚洲制服丝袜精品久久| AA免费观看的1000部电影| 亚洲伊人精品综合在合线| 8x8×在线永久免费视频| 亚洲男人电影天堂| 手机在线看永久av片免费| 亚洲欧美日韩中文无线码| 国产麻豆免费观看91| 美国免费高清一级毛片| 国产精品亚洲mnbav网站| 中国一级特黄的片子免费| 亚洲国产人成在线观看69网站| 1000部拍拍拍18勿入免费视频软件 | 亚洲精品免费在线观看| 91手机看片国产永久免费| 成人区精品一区二区不卡亚洲| 在线观看亚洲免费视频| 九九视频高清视频免费观看| 亚洲精品乱码久久久久久按摩| 99免费观看视频| 亚洲人成色777777精品| 亚洲精品国产精品乱码不卞 | 2020亚洲男人天堂精品| 一级毛片直播亚洲| 国产免费网站看v片在线| 亚洲三级中文字幕| 亚洲成A人片在线观看中文| 永久在线观看免费视频| 午夜在线a亚洲v天堂网2019| 亚洲色图综合在线| 免费在线观看h片| 成人国产网站v片免费观看| 亚洲AV日韩AV永久无码免下载| 成人毛片免费视频| 中文精品人人永久免费| 亚洲人成网亚洲欧洲无码|