linux shell 可以用戶定義函數,然后在shell腳本中可以隨便調用。
格式:
[ function ] funname [()]
{
action;
[return int;]
}
說明:
- 可以帶function fun() 定義,也可以直接fun() 定義,不帶任何參數。
- 參數返回,可以顯示加 return 返回,若不加,將以最后一條命令運行結果,作為返回值。return后跟數值n(0-255)
實例1(無return):
#!/bin/bash
# author:Asa Guo
myFun(){
echo "This is my first shell function"
}
echo "-----function start-----"
myFun
echo "-----function start-----"
輸出:
asa@asa-virtual-machine:~$ ./printf.sh
-----func start-----
This is my first shell func
-----func start-----
實例2(有return):
#!/bin/bash
# author:Asa Guo
funWithReturn(){
echo "Two nums add each other..."
echo "Input the first num1:"
read num1
echo "Input the second num2:"
read num2
echo "Two nums are $num1 and $num2"
return $(($num1+$num2))
}
funWithReturn
echo "num1 + num2 = $?"
輸出:
asa@asa-virtual-machine:~$ ./printf.sh
Two nums add each other...
Input the first num1:
1
Input the second num2:
5
Two nums are 1 and 5 !
num1 + num2 = 6
函數返回值在調用該函數后通過 $? 來獲得。
注意:所有函數在使用前必須定義。這意味著必須將函數放在腳本開始部分,直至shell解釋器首次發現它時,才可以使用。調用函數僅使用其函數名即可。
函數參數
在Shell中,調用函數時可以向其傳遞參數。在函數體內部,通過 $n 的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數...
實例:
#!/bin/bash
# author:Asa Guo
funWithParam(){
echo "The first param is $1"
echo "The second param is $2"
echo "The tenth param is $10"
echo "The tenth param is ${10}"
echo "The eleventh param is ${11}"
echo "Total count is $# "
echo "A string of all params is $*"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
輸出:
asa@asa-virtual-machine:~$ ./printf.sh
first param is 1
second param is 2
tenth param is 10
tenth param is 34
eleventh param is 73
Total count is 11
A string of all params is 1 2 3 4 5 6 7 8 9 34 73
注意:
$10 不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數。
幾個處理參數的特殊字符:
參數處理 | 說明 |
---|---|
$# | 傳遞到腳本的參數個數 |
$* | 以一個單字符串顯示所有向腳本傳遞的參數 |
$$ | 腳本運行的當前進程ID號 |
$! | 后臺運行的最后一個進程的ID號 |
$@ | 與$*相同,但是使用時加引號,并在引號中返回每個參數。 |
$- | 顯示Shell使用的當前選項,與set命令功能相同。 |
$? | 顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。 |