18.Shell函數

函數可以讓我們將一個複雜功能劃分成若干模塊,讓程序結構更加清晰,代碼重複利用率更高。像其他編程語言一樣,Shell 也支持函數。Shell 函數必須先定義後使用。

Shell 函數的定義格式如下:

function_name () {
    list of commands
    [ return value ]
}

如果你願意,也可以在函數名前加上關鍵字 function:

function function_name () {
    list of commands
    [ return value ]
}

函數返回值,可以顯式增加return語句;如果不加,會將最後一條命令運行結果作爲返回值。

Shell 函數返回值只能是整數,一般用來表示函數執行成功與否,0表示成功,其他值表示失敗。如果 return 其他數據,比如一個字符串,往往會得到錯誤提示:“numeric argument required”。

如果一定要讓函數返回字符串,那麼可以先定義一個變量,用來接收函數的計算結果,腳本在需要的時候訪問這個變量來獲得函數返回值。

先來看一個例子:

#!/bin/bash

# 定義無返回值函數

Hello () {

   echo "Hello caoliu!"

}

# 調用函數只需要給出函數名,不需要加括號。

Hello

funWithReturn(){   

    return $(($1+$2))

}

funWithReturn 3 4

#函數返回值在調用該函數後通過 $? 來獲得。

ret=$?

echo "結果: $ret !"

運行結果:

Hello caoliu!

結果: 7 !

像刪除變量一樣,刪除函數也可以使用 unset 命令,不過要加上 .f 選項,如下所示:

$unset .f function_name

如果你希望直接從終端調用函數,可以將函數定義在主目錄下的 .profile 文件,這樣每次登錄後,在命令提示符後面輸入函數名字就可以立即調用。

在Shell中,調用函數時可以向其傳遞參數。在函數體內部,通過 $n 的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數...

帶參數的函數示例:

#!/bin/bash
funWithParam(){
    echo " $1 "
    echo " $2 "
    echo " $10 "
    echo " ${10} "
    echo " ${11} "
    echo " $# "  # 參數個數
    echo " $* "  # 傳遞給函數的所有參數
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

運行腳本:

 1 
 2 
 10 
 34 
 73 
 12 
 1 2 3 4 5 6 7 8 9 34 73

注意,$10 不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數。

另外,還有幾個特殊變量用來處理參數,前面已經提到:wKioL1dzghCALbd0AAAdpPeBtG4726.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章