Shell 函數的本質是一段可以重復使用的腳本代碼,這段代碼被提前編寫好了,放在了指定的位置,使用時直接調取即可。
一、語法
Shell 函數定義的語法格式如下:
function name() {statements[return value]
}
對各個部分的說明:
function
是 Shell 中的關鍵字,專門用來定義函數;name
是函數名;statements
是函數要執行的代碼,也就是一組語句;return value
表示函數的返回值,其中 return 是 Shell 關鍵字,專門用在函數中返回一個值;這一部分可以寫也可以不寫。- 由
{ }
包圍的部分稱為函數體,調用一個函數,實際上就是執行函數體中的代碼。
二、函數定義的簡化寫法
函數定義時也可以不寫 function 關鍵字:
name() {statements[return value]
}
如果寫了 function 關鍵字,也可以省略函數名后面的小括號:
function name {statements[return value]
}
三、函數調用
調用 Shell 函數時可以給它傳遞參數,也可以不傳遞。如果不傳遞參數,直接給出函數名字即可:
name
如果傳遞參數,那么多個參數之間以空格分隔:
name param1 param2 param3
不管是哪種形式,函數名字后面都不需要帶括號。
和其它編程語言不同的是,Shell 函數在定義時不能指明參數,但是在調用時卻可以傳遞參數,并且給它傳遞什么參數它就接收什么參數。
Shell 也不限制定義和調用的順序,你可以將定義放在調用的前面,也可以反過來,將定義放在調用的后面。
四、范例
定義一個函數,計算所有參數的和:
#!/bin/bash
function getsum(){local sum=0for n in $@do((sum+=n))donereturn $sum
}
getsum 10 20 55 15 #調用函數并傳遞參數
echo $?
$@
表示函數的所有參數,$?
表示函數的退出狀態(返回值)
五、系統函數
5.1、basename基本語法
basename [string / pathname] [suffix]
功能描述:basename命令會刪掉所有的前綴包括最后一個(‘/’)字符,然后將字符串顯示出來。
選項:
suffix為后綴,如果suffix被指定了,basename會將pathname或string中的suffix去掉。
5.2、dirname基本語法
dirname #文件絕對路徑
功能描述:從給定的包含絕對路徑的文件名中去除文件名(非目錄的部分),然后返回剩下的路徑(目錄的部分)