[shell]shell函數

來源:互聯網
上載者:User

標籤:style   blog   使用   io   strong   檔案   資料   for   

函數可以讓我們將一個複雜功能劃分成若干模組,讓程式結構更加清晰,代碼重複利用率更高。像其他程式設計語言一樣,Shell 也支援函數。 Shell 函數必須先定義後使用。Shell 函數的定義格式如下:
[function] fun() {    list of commands    [ return value ]}
說明:
  1. 可以帶function fun() 定義,也可以直接fun() 定義,不帶任何參數,function關鍵字和()必須有其中一個。
  2. 返回值,可以顯示加:return 返回,如果不加,將以最後一條命令運行結果,作為返回值。 return後跟數值n(0-255)。
  3. 參數,()內是沒有參數的,它並不像C語言那樣,在()裡可以有參數。那大家可能就鬱悶了,函數調用或多或少總是會需要一些參數,那麼這些參數要怎麼傳遞進來呢?其實參數傳遞方式為:fname;(不需要傳遞參數)或fname agr1 arg2(需要傳遞兩個參數);
Shell 函數返回值只能是整數,一般用來表示函數執行成功與否,0表示成功,其他值表示失敗。如果 return 其他資料,比如一個字串,往往會得到錯誤提示:“numeric argument required”。 如果一定要讓函數返回字串,那麼可以先定義一個變數,用來接收函數的計算結果,指令碼在需要的時候訪問這個變數來獲得函數返回值。shell函數返回值有三種方式:

  1. 直接return通過$?來接收返回值;
  2. 定義全域變數,通過全域變數來接收的方式,使用函數返回值。
  3. echo的方式,通過標準輸出來返回。 
#!/bin/bashfunction sum(){    if [ $# != 2 ]    then        echo "arg num != 2"        return 0    fi    return $(( $1 + $2 ))    }sum 5 6   #調用函數只需要給出函數名,不需要加括弧。echo "5+6=$?" #-->5+6=11; 函數傳回值在調用該函數後通過 $? 來獲得。sum 100 200 echo "100+200=$?"   #-->100+200=44,return後跟數值n(0-255)。300-256=44#向函數傳遞數組a=(1 2 3 4)sum(){    local sum=0;    for v in [email protected]    do        sum=$[sum+v]   #sum=$(($sum+$v));    done    echo $sum;  #-->10}   sum ${a[@]} #像刪除變數一樣,刪除函數也可以使用 unset 命令,不過要加上 .f 選項, #$unset -f function_name#如果你希望直接從終端調用函數,可以將函數定義在主目錄下的 .profile 檔案,這樣每次登入後,在命令提示字元後面輸入函數名字就可以立即調用。
  • $0:是指令碼本身的名字;
  • $#:是傳給指令碼的參數個數;
  • [email protected]:是傳給指令碼的所有參數的列表,即被擴充為"$1" "$2" "$3"等;
  • $*:是以一個單字串顯示所有向指令碼傳遞的參數,與位置變數不同,參數可超過9個,即被擴充成"$1c$2c$3",其中c是IFS的第一個字元;
  • $$:是指令碼啟動並執行當前進程ID號;
  • $?:是顯示最後命令的退出狀態,0表示沒有錯誤,其他表示有錯誤;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.