一、bash函數定義及調用
在寫c語言的時候,我們使用字符串數組存儲命令行參數(argv[])。同樣,在編寫Bash腳本的時候,也使用命令行參數。在Bash函數中也可以使用參數,特殊的是,Bash中的函數是沒有參數列表的,例如
#定義
foo() {
statements
}
#調用
foo
這樣便完成了一個函數的定義,但是沒有任何的形參名稱,這是由於Bash中特殊的參數傳遞方法所致。
二、傳參(命令行參數)
當一個函數被調用時,腳本程序的位置參數($* $@ $#參數個數 $1 $2 $?上一條獨立命令運行結果 )等會被替換為函數的參數。
三、返回值
通常情況下Bash的函數是很少需要返回值的,但是有的時候需要,比如確定一個函數是否被成功執行,然后確定下一步的動作。這樣的邏輯必須得到Bash函數的返回值,用以表示函數執行的狀態。
#!/bin/bash
foo(){
echo Jay
}
result="$(foo)"
echo $result
exit 0
也可用 return 關鍵字:
#!/bin/bash
yesorno(){
echo "is your name $*? "
while true
do
read -p "Enter yes or no: " x
case $x in
y|Y )
return 0;;
n|N )
return 1;;
* )
echo "answer yes or no"
esac
done
}
echo "original parameters are $*"
if yesorno "$1"
then
echo "Hi $1, nice name"
else
echo "Never mind"
fi
exit 0
如果沒有在一個函數內使用return命令指定一個返回值,函數返回的就是執行的最后一條命令的推出碼。
四、其他
必須在調用一個函數之前先對他進行定義。
可以用 local 關鍵字在shell函數中聲明局部變量。
