歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Bash函數簡述

Bash函數簡述

日期:2017/3/1 9:28:32   编辑:Linux編程

一、什麼是Bash函數

Bash不支持goto語句,可以用function實現程序流程跳轉。
當前shell中一組組織在一起並被命名的命令。
比腳本的效率高,一旦定義,就成為shell內存的一部分,可以隨時被調用,不必從文件中讀取。

二、函數定義

兩種定義方式:
1、函數名 +() + 定義
2、funciton + 函數名 + () + 定義,()可選
function func () {

statements
return 1;

}
第一個花括號兩邊的空格是必須的。

三、函數返回值

1、如果使用函數返回值,return只能返回一個整數(0~255),不能返回字符串,且返回值保存在$?變量中,不能直接賦值給其它變量
例如,下面獲得函數返回值的寫法是錯誤的

function func () { return 3; }
i=`func`

2、如果return沒有指定參數,則是最後一行腳本的退出狀態值

3、如果要將函數返回值賦值給一個變量,有兩種方式:
a)用$?賦值

func
i=$?

b)在函數中,用echo打印返回值,再賦值

function func () { echo 3; }
i=`func`

四、函數參數

1、向函數傳遞的參數被當作位置參量來處理,在函數中是本地變量
2、函數參數用$1, $2 ,..., $n來表示,但和通過命令行傳遞給腳本的參數不同。調用方式如下:

func param1 param2

3、如果函數中要使用腳本的參數,只能將腳本的參數作為函數的參數傳遞給函數,例如,可以將腳本的第1個參數$1作為函數的第2個參數傳給函數,那麼函數則通過$2來訪問腳本的第1個參數

$ function welcome { echo "Hi, $1 and $2"; }
$ welcome tom joe
Hi,tom and joe
$ set cb panda ; echo $*
cb panda
$ welcome tom joe
Hi,tome and joe
$ echo $1 $2
cb panda

五、函數中的變量和陷阱

1、在一個shell中的變量無局部和全局之分,隨用隨聲明,無作用域的概念。例如,在一個if...fi塊中定義的變量,出了這個塊的作用域仍然有效。這也說明BASH不適合編寫大的復雜的程序
2、和變量一樣,函數內部的陷阱是全局的
3、函數中可以定義局部變量,出了函數無效,使用local來定義

func() { local count
echo $count }

六、函數調用

1、使用function只是定義函數,要執行函數中的命令必須在腳本中或命令行上調用函數,例如:$ func param1 param2
a) 將函數單獨放入一個腳本裡,再在命令行上執行腳本(直接執行,或使用.,或source),是不會執行函數裡的命令的
b) 將函數單獨放入一個腳本,然後執行,相當於在執行該腳本的shell環境中定義了該函數
例如:下面的命令只是在shell環境中定義函數,並不會調用函數
$ ./func_script.sh

$source ./func_script.sh

2、函數可以遞歸:函數可以自己調用自己,調用次數沒有限制

3、函數中使用exit命令退出整個腳本。

七、常用命令

1、查看定義了哪些函數
$declare -f
$declare -F //只列出函數名

2、撤消函數定義
$unset func_name

3、將函數輸出給子shell
$export -f func_name

Copyright © Linux教程網 All Rights Reserved