<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ù)字型字符。
    主站蜘蛛池模板: 亚洲avav天堂av在线网毛片| 亚洲AV日韩综合一区尤物| 亚洲欧洲国产综合| 亚洲va成无码人在线观看| 国产亚洲婷婷香蕉久久精品| 亚洲一区二区中文| 亚洲一区二区三区高清| 亚洲精品第一国产综合野| 羞羞视频网站免费入口| 成全高清在线观看免费| 四虎永久在线精品免费观看视频 | 99久久免费精品视频| 国产真人无码作爱视频免费| 国产大片91精品免费观看不卡| 日韩免费视频在线观看| 亚洲日产韩国一二三四区| 亚洲国产成人va在线观看网址| 国产精品久久久久久亚洲小说 | 国产精品久久久久免费a∨| 四虎永久免费地址在线网站 | 亚洲色大成网站WWW久久九九| 亚洲精品影院久久久久久| 国产成人精品久久亚洲高清不卡 | 国产大片线上免费看| 国产真人无遮挡作爱免费视频| 国产亚洲精品a在线无码| 亚洲va久久久噜噜噜久久| 亚洲综合av一区二区三区不卡| 国产区在线免费观看| 国内精品久久久久影院免费 | 亚洲AV综合色区无码二区偷拍| h片在线观看免费| 国产桃色在线成免费视频| 亚洲一区二区三区影院| 亚洲日韩精品无码专区加勒比☆| 视频免费在线观看| 国产真实伦在线视频免费观看| 亚洲精品综合久久| 亚洲三级高清免费| 无码国产精品一区二区免费模式| 国产极品粉嫩泬免费观看 |