函數
在大多數編程語言中,都會存在函數的概念,如C語言中的printf()
。在編程過程中,將一段會重複使用且爲完成特定功能的語句寫在函數中,可以減少代碼的長度提高可讀性。在ShellScript中,除了使用函數外有另一種選擇,即將一個較長的腳本分爲多個小腳本文件,但這種方法的效率會比使用函數低,在實際編寫中可根據需要選擇使用函數或者分文件。
在ShellScript中函數的定義與使用的方法也非常簡單。定義一個函數只需要寫出函數名,再跟上一對圓括號和花括號,並將具體的語句寫在花括號中;使用函數時只需寫出函數名即可調用該函數。
# 函數的定義
function_name() {
statements
}
# 使用函數
function_name
下面使用一個簡單的例子演示函數的使用。
#!/bin/sh
foo() {
echo "Function foo is executing"
}
echo "script starting"
foo
echo "script ended"
程序先是定義(不執行)了函數foo,然後開始執行下面的代碼。執行完echo "script starting
後執行foo
將調用函數foo,於是程序將執行函數foo中的語句。執行該程序,將得到以下結果。
script starting
Function foo is executing
script ended
函數參數與返回值
在函數的使用中經常需要傳遞參數和返回值。在定義函數時,無需像其它語言一樣預先定義函數的個數及名稱,而是在函數中直接使用參數變量即可,參數變量參見Shell Script介紹及變量使用。在調用函數時,若需要傳遞參數,只需在函數名後加上參數,如function_name arg1 arg2 ...
。函數的值返回方法與其它大部分語言類似,即return return_value
。下面將使用一個小程序演示函數參數及返回值的使用。
#!/bin/sh
yes_or_no() {
echo "Is your name $* ?"
while true
do
echo -n "Enter yes or no: "
read x
case "$x" in
[yY] | [yY][eE][sS] )
return 0
;;
[nN] | [nN][oO] )
return 1
;;
* )
echo "answer yes or no"
;;
esac
done
}
if yes_or_no "xxx"
then
echo "Hi xxx, nice name"
else
echo "Never mind"
fi
exit 0
下面將執行兩次程序,分別輸入yes與no,結果如下。
# first time
Is your name xxx ?
Enter yes or no: yes
Hi xxx, nice name
# second time
Is your name xxx ?
Enter yes or no: no
Never mind