把代碼封裝成函數,相當於造了一個“輪子”,之后就直接重復使用即可。
函數的創建
shell中函數的創建有2種方式
1.使用function關鍵字
語法
function test {
...
}
2.使用括號
語法
test() {
...
}
函數的調用
記住三點即可。
1.調用方法
直接寫函數名
test
2.先定義后調用
3.對於同名的函數,后面的會覆蓋前面的
函數的返回值
使用默認的退出狀態碼有bug,所以推薦自定義退出碼的方式。
test(){
...
return 5
}
test
echo $?
注意點
1.函數一調用完成就馬上使用返回值(因為$?會顯示上一條語句的返回值)
2.返回值范圍在0~255
函數做為變量的值
編程語言中,將函數調用賦值給變量是很常見的事,但是shell中的情況有些不太一樣
1.當函數調用賦值給變量時,並不會執行函數
2.函數的第一個echo語句的結果會被賦值給變量,剩下echo 語句或者代碼正常執行
3.返回值並不會賦值給變量
function test {
echo 1
echo 2
return 6
}
echo 11
t=$(test)
echo "t: $t"
echo hello
結果
11 t: 1
2 hello
向函數傳遞參數
記住以下幾點
1.在腳本中調用函數時,必須將參數和函數調用放在同一行
2.在函數中,可以使用參數的環境變量來獲取參數值
3.腳本在命令行中的參數值,需要在調用函數時一起傳入
function test {
echo $1
echo $2
return 6
}
test $1 $2
結果
u
me
注意:
這里函數中$1和$2和調用時的含義不一樣。
函數中的$1和$2指向腳本中函數調用時的參數;而調用時的$1和$2指向命令行中的參數。
在函數中使用變量
在函數中定義局部變量要使用local關鍵字
local test
向函數中傳遞數組
將數組中的元素分解開,之后在函數內部進行重組
function testit {
local newarray
newarray=(;'echo "$@"')
echo "The new array value is: ${newarray[*]}"
}
myarray=(1 2 3 4 5)
echo "The original array is ${myarray[*]}"
testit ${myarray[*]}
結果
The original array is 1 2 3 4 5 The new array value is: 1 2 3 4 5
創建庫文件
庫文件可以實現一次定義函數,終生使用
庫文件
a() {
echo ni
}
腳本文件
#!/bin/bash
. ./library
在命令行使用函數
單行方式
function test { ...; }
注意:tset之后必須有空格,語句結尾要加;。
多行方式
function test { >... >... >}
注意:如果函數名和內置命令沖突,那么會覆蓋內置命令!
在.bashrc中使用函數
直接在.bashrc文件中定義函數或者載入庫文件即可。
使用shtool公共函數庫
下載
傳送門:ftp://ftp.gnu.org/gnu/shtool/shtool-2.0.8.tar.gz
安裝
tar xf shtool... cd shtool... ./configure make
make test #測試
shtool庫文件
語法
shtool [options] [function [options] [args]]
shtool platform --help Usage: shtool platform [-F|--format <format>] [-S|--sep <string>] [-C|--conc <string>] [-L|--lower] [-U|--upper] [-v|--verbose] [-c|--concise] [-n|--no-newline] [-t|--type <type>] [-V|--version] [-h|--help]