一、Shell函數
本教程目前為止所有指令碼都是從頭到尾執行。這樣做很好,但你也許已經注意到有些指令碼段間互相重複。
shell允許將一組命令集或語句形成一個可用塊,這些塊稱為shell函數。
shell中函數的定義格式如下:
複製代碼 代碼如下:
函數名(){
command1
command2
...
commandN
[ return value ]
}
如果願意,可在函數名前加上關鍵字function,這取決於使用者。
複製代碼 代碼如下:
function 函數名(){
command1
command2
...
commandN
[ return value ]
}
函數傳回值,可以顯示增加return語句;如果不加,則將最後一條命令運行結果作為傳回值(一般為0,如果執行失敗則返回錯誤碼)。 return後跟數值(0-255)。
函數可以放在同一個檔案中作為一段代碼,也可以放在只包含函數的單獨檔案中。函數不必包含很多語句或命令,甚至可以只包含一個echo語句,這取決於使用者。
下面的例子定義了一個函數並進行調用:
複製代碼 代碼如下:
#!/bin/bash
demoFun(){
echo "This is your first shell function!"
}
echo "Function begin..."
hello
echo "Function end!"
輸出:
Function begin...
This is your first shell function!
Function end!
下面定義一個帶有return語句的函數:
複製代碼 代碼如下:
#!/bin/bash
funWithReturn(){
echo "The function is to get the sum of two numbers..."
echo -n "Input first number: "
read aNum
echo -n "Input another number: "
read anotherNum
echo "The two numbers are $aNum and $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "The sum of two numbers is $? !"
輸出類似下面:
The function is to get the sum of two numbers...
Input first number: 25
Input another number: 50
The two numbers are 25 and 50 !
The sum of two numbers is 75 !
函數傳回值在調用該函數後通過 $? 來獲得。
注意:所有函數在使用前必須定義。這意味著必須將函數放在指令碼開始部分,直至shell解譯器首次發現它時,才可以使用。調用函數僅使用其函數名即可。
二、Shell函數參數
在Shell中,調用函數時可以向其傳遞參數。在函數體內部,通過 $n 的形式來擷取參數的值,例如,$1表示第一個參數,$2表示第二個參數...
帶參數的函數樣本:
複製代碼 代碼如下:
#!/bin/bash
funWithParam(){
echo "The value of the first parameter is $1 !"
echo "The value of the second parameter is $2 !"
echo "The value of the tenth parameter is $10 !"
echo "The value of the tenth parameter is ${10} !"
echo "The value of the eleventh parameter is ${11} !"
echo "The amount of the parameters is $# !"
echo "The string of the parameters is $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
輸出:
The value of the first parameter is 1 !
The value of the second parameter is 2 !
The value of the tenth parameter is 10 !
The value of the tenth parameter is 34 !
The value of the eleventh parameter is 73 !
The amount of the parameters is 12 !
The string of the parameters is 1 2 3 4 5 6 7 8 9 34 73 !"
注意,$10 不能擷取第十個參數,擷取第十個參數需要${10}。當n>=10時,需要使用${n}來擷取參數。
另外,還有幾個特殊字元用來處理參數: