在shell腳本中,用戶可以自定義函數。
shell函數定義語法規則
語法規則1
name ()
{
函數語句塊
}
語法規則2
function name ()
{
函數語句塊
return 語句
}
其中,function指示後續的代碼是一個函數,function關鍵字可加可不加,name是函數名稱,函數名之後有(),括號內不需要任何內容,包括空格,花括號內是函數體,函數體中可以有return語句,也可以沒有return語句,若沒有指定return語句,函數的退出狀態碼是函數中最後一條命令返回的退出狀態碼。
執行函數只需要在函數體外調用函數名,若需要傳參,則在函數名之後添加參數即可(此時在函數體內應通過$n的形式來獲取參數的值),示例如下(shell腳本名爲function.sh):
1)沒有添加return語句,直接將結果打印輸出
#!/bin/bash
sum=0
add ()
{
if (( $# < 2 ));then
echo "please input two numbers!"
exit
fi
sum=$(($1 + $2))
echo $sum
}
add $1 $2
執行shell腳本
或者直接使用函數退出狀態碼
#!/bin/bash
add ()
{
if (( $# < 2 ));then
echo "please input two numbers!"
exit
fi
echo $(($1 + $2))
}
result=`add $1 $2`
echo "Sum is "$result
這裏 把函數當作一個命令,用反引號來獲取函數最後一條命令(最後一條命令需要用echo語句)的退出狀態碼,並賦值給自定義變量。
2)添加return語句
#!/bin/bash
sum=0
function add ()
{
if (( $# < 2 ));then
echo "please input two numbers!"
exit
fi
sum=$(($1 + $2))
return $sum
}
add $1 $2
echo "Sum is "$sum
執行shell腳本結果如下:
還可以這樣編寫:
#!/bin/bash
function add ()
{
if (( $# < 2 ));then
echo "please input two numbers!"
exit
fi
return $(($1 + $2))
}
add $1 $2
echo "Sum is $? "
腳本執行結果
沒有定義額外的變量,同樣能夠實現兩數相加的功能。
這裏使用$?來獲取調用函數後函數的返回值。使用$?來獲取返回值的時需要注意,$?的應用主要是判斷前一個命令是否執行正確,若在調用函數與輸出結果之間有其他的命令執行,此時$?獲取不到函數的返回值,示例如下:
#!/bin/bash
function add ()
{
if (( $# < 2 ));then
echo "please input two numbers!"
exit
fi
return $(($1 + $2))
}
add $1 $2
echo "two numbers add..."
echo "Sum is $? "
shell執行
這裏的sum is 0 中的0表示上一個命令執行成功。並沒有獲取到函數的返回值,因此,儘量使用變量的形式來獲取函數返回值。
⚠️
1)函數在使用前必須先定義
2)當傳入的參數大於等於10個時,應使用${n}來獲取參數,n>=10