1. 程式人生 > >linux Shell函數

linux Shell函數

line return 文件中 can bin 如果 局部變量 ret 傳遞

Shell函數類似於Shell腳本,裏面存放了一系列的指令,不過Shell的函數存在於內存,而不是硬盤文件,所以速度很快,另外,Shell還能對函數進行預處理,所以函數的啟動比腳本更快。

1、函數定義

1 2 3 4 function 函數名() { 語句 [return] }

關鍵字function表示定義一個函數,可以省略,其後是函數名,有時函數名後可以跟一個括號,符號“{”表示函數執行命令的入口,該符號也可以在函數名那一行,“}”表示函數體的結束,兩個大括號之間是函數體。

語句部分可以是任意的Shell命令,也可以調用其他的函數。

如果在函數中使用exit命令,可以退出整個腳本,通常情況,函數結束之後會返回調用函數的部分繼續執行。

可以使用break語句來中斷函數的執行。

declare –f 可以顯示定義的函數清單

declare –F 可以只顯示定義的函數名

unset –f 可以從Shell內存中刪除函數

export –f 將函數輸出給Shell

另外,函數的定義可以放到 .bash_profile 文件中,也可以放到使用函數的腳本中,還可以直接放到命令行中,還可以使用內部的unset命令刪除函數。一旦用戶註銷,Shell將不再保持這些函數。

2、函數的調用

函數調用的實例:

1 2 3 4 5 6 7 8 #!/bin/bash function show() { echo "hello , you are calling the function"
} echo "first time call the function" show echo "second time call the function" show

3、函數參數的傳遞

函數可以通過位置變量傳遞參數。例如

函數名 參數1 參數2 參數3 參數4

當函數執行時,$1 對應 參數1,其他依次類推。

實例:

1 2 3 4 5 6 7 8 #!/bin/bash function show() { echo "hello , you are calling the function $1" } echo "first time call the function"
show first echo "second time call the function" show second

4、函數的返回值

函數中的關鍵字“return”可以放到函數體的任意位置,通常用於返回某些值,Shell在執行到return之後,就停止往下執行,返回到主程序的調用行,return的返回值只能是0~256之間的一個整數,返回值將保存到變量“$?”中。

實例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #!/bin/bash function abc() { RESULT=`expr $1 \% 2` #表示取余數 if [ $RESULT –ne 0 ] ; then return 0 else return 1 fi } echo "Please enter a number who can devide by 2" read N abc $N case $? in 0) echo "yes ,it is” ;; 1) echo “no ,it isn’t” ;; esac

在這裏要註意參數傳遞了,上面read進來的數字,必須加上$符號才能傳遞給函數,我剛開始不知道是哪裏錯了,找了半天才知道是這裏出錯了。

5、函數的載入

如果函數在另外一個文件中,我們該怎麽調用它呢?

這裏就有一個方法。比如 show 函數寫在了function.sh裏面了,我們就可以用 source 命令

1 2 source function.sh show

這樣就可以調用了。

6、函數的刪除

用法:unset –f 函數名

7、函數的變量作用域

默認情況下,變量具有全局作用域,如果想把它設置為局部作用域,可以在其前加入local

例如:

1 local a="hello"

使用局部變量,使得函數在執行完畢後,自動釋放變量所占用的內存空間,從而減少系統資源的消耗,在運行大型的程序時,定義和使用局部變量尤為重要。

8、函數的嵌套

函數可以進行嵌套,實例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/bin/bash function first() { function second() { function third() { echo "------this is third" } echo "this is the second" third } echo "this is the first" second } echo "start..." first

linux Shell函數