Shell 函數(shù)
詳情地址:? https://www.xiaobuteach.com/shell/base2/function.html?from=bili
Shell 函數(shù)
函數(shù)用于代碼重用。
函數(shù)定義封裝代碼塊,函數(shù)調(diào)用執(zhí)行代碼塊,1次定義,N次調(diào)用,即N次重用。
1 基本使用
函數(shù)的使用步驟:1)定義函數(shù);2)調(diào)用函數(shù)。
定義函數(shù)語(yǔ)法
function 函數(shù)名()
{
?函數(shù)體
}
實(shí)際項(xiàng)目中,函數(shù)名要求見(jiàn)名思義。
簡(jiǎn)化寫法:省略function
函數(shù)名()
{
?函數(shù)體
}
例1:定義函數(shù)顯示網(wǎng)站與作者。
function f1(){
?echo "網(wǎng)站名稱:小步教程"
?echo "網(wǎng)站地址:www.xiaobuteach.com"
?echo "網(wǎng)站作者:小步2023"
}
調(diào)用函數(shù)語(yǔ)法
函數(shù)名
沒(méi)有定義參數(shù)時(shí),直接寫函數(shù)名即調(diào)用,就像我們調(diào)用其它命令一樣。
可以理解為:系統(tǒng)的命令就是函數(shù)。
完整示例:
#定義函數(shù)
function f1(){
? ?echo "網(wǎng)站名稱:小步教程"
? ?echo "網(wǎng)站地址:www.xiaobuteach.com"
? ?echo "網(wǎng)站作者:小步2023"
}
#調(diào)用函數(shù)
f1
#再調(diào)用一次
f1

2 變量作用域
shell腳本文件的變量分兩種:全局變量與局部變量。
全局變量:無(wú)論函數(shù)內(nèi)部與外部,直接聲明的變量都屬于shell文件內(nèi)的全局變量,定義之后整個(gè)文件都可以訪問(wèn)。我們之前使用變量都屬于這類。
局部變量:函數(shù)內(nèi)部通過(guò)local聲明的變量,屬于局部變量,離開(kāi)函數(shù)就無(wú)法訪問(wèn)。
local 變量=值
或
local 變量
示例
var1="網(wǎng)站名稱:小步教程"
function f1(){
? ?var2="網(wǎng)站地址:www.xiaobuteach.com"
? ?local var3
? ?var3="網(wǎng)站作者:小步2023"
? ?echo "內(nèi)部訪問(wèn)var1:$var1"
? ?echo "內(nèi)部訪問(wèn)var2:$var2"
? ?echo "內(nèi)部訪問(wèn)var3:$var3"
}
f1
echo "外部訪問(wèn)var1:$var1"
echo "外部訪問(wèn)var2:$var2"
echo "外部訪問(wèn)var3:$var3"

注意事項(xiàng)
腳本文件里定義的變量,無(wú)論全局變量與局部變量,直接執(zhí)行完畢之后,當(dāng)前Shell無(wú)法訪問(wèn)。
3 參數(shù)
我們調(diào)用系統(tǒng)的命令都會(huì)傳遞參數(shù),例如創(chuàng)建文件夾
mkdir 文件夾1
這里是一個(gè)參數(shù);
還可以多個(gè)參數(shù):
mddir 文件夾1 文件夾2 文件夾3
調(diào)用函數(shù)傳遞參數(shù)語(yǔ)法
函數(shù)名 參數(shù)1 參數(shù)2 …參數(shù)n
定義函數(shù)獲取參數(shù)
不像很多語(yǔ)言,定義參數(shù)需要設(shè)置函數(shù)聲明。Shell函數(shù)只需要在函數(shù)體中直接獲取傳遞參數(shù)即可。
$1獲取第1個(gè)參數(shù),$2獲取第2個(gè)參數(shù),依次類推。
示例
例1:上述函數(shù)的網(wǎng)站名與作者由參數(shù)傳遞。
f3(){
? ?echo "網(wǎng)站名稱:$1"
? ?echo "網(wǎng)站地址:$2"
? ?echo "網(wǎng)站作者:$3"
}
#調(diào)用函數(shù)
f3 小步教程 www.xiaobuteach 小步2023

動(dòng)態(tài)獲取函數(shù)與參數(shù)信息
$FUNCNAME表示函數(shù)名字,$#表示參數(shù)個(gè)數(shù),$*表示所有參數(shù)。
f3(){
? ?echo "網(wǎng)站名稱:$1"
? ?echo "網(wǎng)站地址:$2"
? ?echo "網(wǎng)站作者:$3"
? ?echo "函數(shù)名:$FUNNAME,參數(shù)個(gè)數(shù):$#,參數(shù)列表:$*"
}
#調(diào)用函數(shù)
f3 小步教程 www.xiaobuteach 小步2023
