使用函數(shù)可以在腳本中省去一些輸入工作,這一點(diǎn)是顯而易見的。但如果你碰巧要在多個(gè)腳本中使用同一段代碼呢?顯然,為了使用一次而在每個(gè)腳本中都定義同樣的函數(shù)太過麻煩。
有個(gè)方法能解決這個(gè)問題!bash shell允許創(chuàng)建函數(shù)庫文件,然后在多個(gè)腳本中引用該庫文件。
這個(gè)過程的第一步是創(chuàng)建一個(gè)包含腳本中所需函數(shù)的公用庫文件。這里有個(gè)叫作myfuncs的庫文件,它定義了3個(gè)簡(jiǎn)單的函數(shù),那么如何創(chuàng)建函數(shù)庫文件呢?下面就由南昌網(wǎng)絡(luò)公司小編為大家講解一下:
$ cat myfuncs
# my script functions
function addem {
echo $[ $1 + $2 ]
}
function multem {
echo $[ $1 * $2 ]
}
function divem {
if [ $2 -ne 0 ]
then
echo $[ $1 / $2 ]
else
echo -1
fi
}
$
下一步是在用到這些函數(shù)的腳本文件中包含myfuncs庫文件。從這里開始,事情就變復(fù)雜了。
問題出在shell函數(shù)的作用域上。和環(huán)境變量一樣,shell函數(shù)僅在定義它的shell會(huì)話內(nèi)有效。如果你在shell命令行界面的提示符下運(yùn)行myfuncs shell腳本,shell會(huì)創(chuàng)建一個(gè)新的shell并在其中運(yùn)行這個(gè)腳本。它會(huì)為那個(gè)新shell定義這三個(gè)函數(shù),但當(dāng)你運(yùn)行另外一個(gè)要用到這些函數(shù)的腳本時(shí),它們是無法使用的。
這同樣適用于腳本。如果你嘗試像普通腳本文件那樣運(yùn)行庫文件,函數(shù)并不會(huì)出現(xiàn)在腳本中。
$ cat badtest4
#!/bin/bash
# using a library file the wrong way
./myfuncs
result=$(addem 10 15)
echo "The result is $result"
$
$ ./badtest4
./badtest4: addem: command not found
The result is
$
使用函數(shù)庫的關(guān)鍵在于source命令。source命令會(huì)在當(dāng)前shell上下文中執(zhí)行命令,而不是創(chuàng)建一個(gè)新shell??梢杂胹ource命令來在shell腳本中運(yùn)行庫文件腳本。這樣腳本就可以使用庫中的函數(shù)了。
source命令有個(gè)快捷的別名,稱作點(diǎn)操作符(dot operator)。要在shell腳本中運(yùn)行myfuncs庫文件,只需添加下面這行:
. ./myfuncs
這個(gè)例子假定myfuncs庫文件和shell腳本位于同一目錄。如果不是,你需要使用相應(yīng)路徑訪問該文件。下面小編就來講一下用myfuncs庫文件創(chuàng)建腳本的方法。
$ cat test14
#!/bin/bash
# using functions defined in a library file
. ./myfuncs
value1=10
value2=5
result1=$(addem $value1 $value2)
result2=$(multem $value1 $value2)
result3=$(divem $value1 $value2)
echo "The result of adding them is: $result1"
echo "The result of multiplying them is: $result2"
echo "The result of dividing them is: $result3"
$
$ ./test14
The result of adding them is: 15
The result of multiplying them is: 50
The result of dividing them is: 2
$
這樣該腳本就成功地使用了myfuncs庫文件中定義的函數(shù)。
以上就是南昌網(wǎng)絡(luò)公司小編為大家介紹的在Linux中庫文件的創(chuàng)建與使用,如果大家還有哪些不太明白的地方,可隨時(shí)來電和我們聯(lián)系,此外,了解更多關(guān)于網(wǎng)站建設(shè)、微信開發(fā)、南昌APP開發(fā)等方面的資訊,歡迎關(guān)注百恒網(wǎng)絡(luò)官網(wǎng)動(dòng)態(tài)!