一、函數介紹function
爲了不代碼重複使用,咱們通常經過函數編寫代碼塊,而這一個代碼塊用來實現某種功能。
且,這個功能在後面的代碼中,會重複調用;
二、函數的語法格式
(1)函數的寫法格式:
function check_cpu {
cat /proc/cpuinfo
}
ls /etc/
check_cpu 【不調用函數,則函數體中的命令是不會執行的;在哪裏調用,函數體中的命令就在那裏執行】shell
(2)*fun_name() {
函數體
$1 $2 ... $10
}
fun_name 1 2 3
:wq
function.sh 4 5 6 7 8 9 10 11 12 13 14
三、函數的調用 -- return
函數返回值
(1)當函數中指定了判斷語句的時候,咱們默認要返回一個錯誤的結果,可是最近一條命令確實正確的,這時候,咱們須要經過return返回一個咱們須要的錯誤狀態碼;
(2)函數結束的時候,咱們須要指定一個return的正確返回碼; 若是使用在循環語句中,return會跳出循環;
四、函數接受參數
函數 變量
和普通的命令同樣
只須要注意,在函數接受參數的時候,不會使用外部的傳參,而是以腳本內部的參數爲準,
五、函數中的變量
(1)本地變量
local 變量名=xxx
本地變量只在本函數內部生效bash
(2)局部變量
腳本內部的變量
(3)環境變量
在整個Linux系統的bash中生效 函數
TEST() {
local i=9
let i++
echo i
exit 0
}
i=1
TEST
echo i
(4) 關於腳本執行的問題:
bash 的方式來執行 -- #!/bin/bash
bash所執行的腳本中定義的變量,在當前shell的子shell中;
全路徑或者相對路徑的方式來執行; -- 須有受權執行權限;
source 腳本文件 或者 . 腳本文件
source這種方式來執行腳本的時候,內部變量所定義的值是在當前shell中的;
六、函數遞歸
n的階乘 ui
n! = n(n-1)!
$[$1* $[ fac -1]]
fact(){
if [ $1 -lt 1 ];then
echo 1 //必定要寫成1
else
i=$[$1*$(fact $[$1-1])] // n(n-1)
echo $i
fi
}
(n-1) = (n-1)(n-2)!
2!=2*1!
fac(){
$[fac -1 ]
}
fac 5
兔子數列,斐波那契數列 spa
#!/bin/bash
#
fab(){
if [ $1 -eq 1 ];then
echo 1
elif [ $1 -eq 2 ];then
echo 1
else
echo $[$(fab $[$1-1])+$(fab $[$1-2])]
fi
}
fab 7