創(chuàng)建函數(shù)

1. 創(chuàng)建函數(shù)
function name {
    commands
}

name() {
commands
}

# 函數(shù)調(diào)用
name
2. 函數(shù)返回值-默認(rèn)的退出狀態(tài)碼

默認(rèn)情況下,函數(shù)的退出狀態(tài)碼是函數(shù)中最后一個命令返回的退出狀態(tài)碼。函數(shù)執(zhí)行結(jié)束后,可以用標(biāo)準(zhǔn)變量 $? 來確定函數(shù)的退出狀態(tài)碼。

3. 使用 return 命令

return 命令允許使用一個整數(shù)值作為函數(shù)的退出狀態(tài)碼。此值必須介于0~255.

4. 使用函數(shù)輸出

可以將函數(shù)的輸出保存到 shell 變量中

result=$(name)

result 會獲取 name 函數(shù)的輸出,而不是查看其退出狀態(tài)。
??:這種方法可以返回浮點數(shù)和字符串

5. 向函數(shù)傳遞參數(shù)

函數(shù)可以使用標(biāo)準(zhǔn)的位置變量來表示傳給函數(shù)的任何參數(shù)。例如,函數(shù)名保存在 $0 變量中,函數(shù)參數(shù)依次保存在 $1 、 $2 等變量中。$# 表示傳給函數(shù)的參數(shù)數(shù)量。

function add {
    echo $1 $2 $#
}

add 1 2
# 輸出 1 2 2

接收命令行參數(shù)

function add {
    echo $1 $2 $#
}

add $1 $2
# 命令行運行:sh test.sh 1 2
6. 全局變量和局部變量

1??全局變量:
和 python 一樣,在函數(shù)外部定義的變量為全局變量,在函數(shù)內(nèi)部可以訪問和更改,更改后全局變量的值也就變了;在函數(shù)內(nèi)部定義的變量,在函數(shù)外無法被訪問。
2??:局部變量:
在函數(shù)內(nèi)部變量聲明前加上 local 關(guān)鍵字,則為局部變量。如果函數(shù)之外有同名變量,那么 shell 會保持這兩個變量的值互不干擾。

function func1 {
    temp=$[ $value + 1]
}

value=10
temp=2

func1

echo $temp
# 輸出11,改變了外部定義的temp的值
function func1 {
    local temp=$[ $value + 1]
}

value=10
temp=2

func1

echo $temp
# 輸出2,沒有改變外部定義的temp的值
7. 向函數(shù)傳遞數(shù)組

如果將數(shù)組變量作為函數(shù)參數(shù)進(jìn)行傳遞,則函數(shù)只會提取數(shù)組變量的第一個元素。
要解決這個問題,必須先將數(shù)組變量拆解成多個數(shù)組元素,然后將這些數(shù)組元素作為函數(shù)參數(shù)傳遞。最后在函數(shù)內(nèi)部,將所有的參數(shù)重新組合成一個新的數(shù)組變量。

function testit {
    local newarray
    newarray=(`echo "$@"`)
    echo "${newarray[*]}"
}

myarray=(1 2 3 4 5)
testit ${myarray[*]}
# 不能用 testit myarray,否則函數(shù)只能獲取到第一個元素
8. 函數(shù)返回數(shù)組

同上,函數(shù)先用 echo 語句按正確順序輸出數(shù)組的各個元素,然后腳本再將數(shù)組元素組合成一個新的數(shù)組變量。

function testit {
    local newarray
    newarray=(`echo "$@"`)
    echo "${newarray[*]}"
}

myarray=(1 2 3 4 5)
# 將函數(shù)的結(jié)果組合成數(shù)組賦值給result
result=(`testit ${myarray[*]}`)
echo ${result[*]}

# 輸出 1 2 3 4 5
9. 遞歸函數(shù)
function factorial {
    if [ $1 -eq 1 ]
    then
        echo 1
    else
        local temp=$[ $1 - 1 ]
        local result=`factorial $temp`
        echo $[ $result * $1 ]
    fi
}
10. 創(chuàng)建庫

source 命令,也就做 點號操作符

# myfunc.sh 文件

function add {
    echo $[ $1 + $2 ]
}

要在新的腳本中調(diào)用 add 函數(shù),需要把 myfunc.sh 腳本源引過來。

. ./myfunc.sh

res=$(add 1 2)
11. 在 .bashrc 文件中定義函數(shù)

.bashrc 文件中定義的函數(shù),或源引的腳本文件,可以在其他需要的地方直接調(diào)用這些函數(shù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容