Shell入門教程:Shell函數詳解


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

1、函數定義

function 函數名() {
	語句
	[return]
}

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

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

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

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

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

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

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

export –f 將函數輸出給Shell

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

2、函數的調用

函數調用的實例:

#!/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,其他依次類推。

實例:

#!/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之間的一個整數,返回值將保存到變量“$?”中。

實例:

#!/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 命令

source function.sh
show

這樣就可以調用了。

6、函數的刪除

用法:unset –f 函數名

7、函數的變量作用域

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

例如:

local a="hello"

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

8、函數的嵌套

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

#!/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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM