本篇內(nèi)容介紹了“Shell腳本中的函數(shù)怎么使用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
函數(shù)是一組命令,這些命令被賦予一個(gè)名稱,該名稱的作用類似于該組命令的句柄。要執(zhí)行函數(shù)中定義的這組命令,只需使用您提供的名稱調(diào)用該函數(shù)即可。
在某些情況下,您需要執(zhí)行一個(gè)代碼塊,該代碼塊在shell腳本的不同位置執(zhí)行多次特定過(guò)程。Shell函數(shù)類似于其他編程語(yǔ)言中的子例程,過(guò)程和函數(shù)。
?它有助于我們重用代碼。
?提高程序的可讀性。
?在程序內(nèi)有效使用變量。
?允許我們逐個(gè)測(cè)試程序。
?將程序顯示為一系列子步驟。
要使用的語(yǔ)法:
Syntax1:
function function_name
{
###命令集
}
Syntax2:
函數(shù)名()
{
####命令集
}
function是聲明函數(shù)定義的關(guān)鍵工作。
function_name是聲明的函數(shù)的名稱。
Curly braces {}充當(dāng)包含函數(shù)代碼的分隔符。
命令集是調(diào)用函數(shù)時(shí)要執(zhí)行的代碼。
因此,首先聲明一個(gè)函數(shù),然后在需要時(shí)調(diào)用它。
在第一種語(yǔ)法中,您必須使用關(guān)鍵字函數(shù),后跟函數(shù)名稱以及打開和關(guān)閉括號(hào)和花括號(hào),以將函數(shù)的內(nèi)容與主例程分開。
在第二種語(yǔ)法中,由函數(shù)名稱,開括號(hào)和閉括號(hào)以及花括號(hào)組成。
我們有一些shell腳本示例:
在這個(gè)例子中,我們將編寫一個(gè)非常小的函數(shù),用“----”打印一行
讓我們看看它是如何工作的:
第1行:聲明函數(shù) print_line
。
第2行和第4行:{ }
用于分隔函數(shù)體的花括號(hào) 。
第3行:函數(shù)體中唯一的語(yǔ)句:使用echo命令打印一行“---”字符。
第5行:調(diào)用該 print_line
函數(shù)。
第6行:打印提供的參數(shù) $1
。
第7行:print_line
再次調(diào)用該 函數(shù)。
注意:$1
在上面的示例中,“ ”將采用以下值,您將在執(zhí)行腳本時(shí)給出參數(shù)。
1) 打印“歡迎使用自動(dòng)化實(shí)驗(yàn)室”(它將使用雙引號(hào)打印整個(gè)聲明)2) 打印“歡迎使用”(它將僅顯示“收件人”聲明)3) 打印“歡迎”(它將打印只歡迎)./function.sh “To Automation Laboratories”
./function.sh To Automation Laboratories
./function.sh (without any argument)
讓我們?cè)賮?lái)看一個(gè)例子:
創(chuàng)建后功能 myfunction的,它然后通過(guò)調(diào)用其調(diào)用函數(shù)的名字我們的主程序。主例程將在我們的腳本中的任何位置,未定義為我們的函數(shù)的一部分。
#!/斌/慶典
MyFunction的()
{
回聲 “哦!實(shí)際上,它的工作原理“
}
MyFunction的
現(xiàn)在讓我們重新安排我們的代碼來(lái)測(cè)試函數(shù)是否可以在我們的腳本中的任何地方聲明。
#!/斌/慶典
回聲 “用于測(cè)試”
MyFunction的
MyFunction的()
{
回聲 “哦!實(shí)際上,它的工作原理“
}
線3 在上面的代碼段返回沒(méi)有發(fā)現(xiàn)錯(cuò)誤的命令。這只意味著:
該功能只適用,如果它是你的主程序之前聲明。如果您在主程序之后聲明了您的功能,則解釋器將返回錯(cuò)誤。
在函數(shù)上傳遞參數(shù)
您可以在 bash 函數(shù)中傳遞參數(shù)并處理這些數(shù)據(jù)。下面的代碼顯示了如何在 shell腳本中傳遞值的過(guò)程:
#!/斌/慶典
MyFunction的()
{
echo “第一個(gè)參數(shù)是$ 1 ”
echo “第二個(gè)參數(shù)是$ 2 ”
}
myfunction“你好”“世界”
讓我們理解以上內(nèi)容:
在我們調(diào)用之后,我們添加了值“Hello”和“World” myfunction
。
這些值作為參數(shù)傳遞給myfunction并存儲(chǔ)在局部變量中。
解釋器將傳遞的值存儲(chǔ)到預(yù)定義變量中,這些變量根據(jù)傳遞參數(shù)的順序命名,1作為起始名稱直到傳遞順序。
請(qǐng)注意,“Hello”字存儲(chǔ)在變量1中,值“World”存儲(chǔ)在變量2中。
注意:上面的1和2是局部變量,因此,除了傳遞參數(shù)的函數(shù)之外,腳本的其他部分都無(wú)法訪問(wèn)它們。
讓我們通過(guò)下面的例子來(lái)識(shí)別上面的注意事項(xiàng):
#!/斌/慶典
MyFunction的()
{
echo “第一個(gè)參數(shù)是$ 1 ”
echo “第二個(gè)參數(shù)是$ 2 ”
}
myfunction“你好”“世界”
回聲 $ 1
回聲 $ 2
在 echo $1
和 echo $2
我們的腳本的最后兩行沒(méi)有顯示,因?yàn)榻忉尣怀姓J(rèn)這兩個(gè)變量,因?yàn)樗鼈兌际蔷植拷omyFunction。
讓我們通過(guò)再舉一個(gè)例子來(lái)更清楚地了解這一點(diǎn):
我們將編寫一個(gè)估計(jì)字符串長(zhǎng)度的函數(shù)。該字符串將作為參數(shù)提供給函數(shù)。讓我們'看看它會(huì)是怎樣的。
嗯...在此之前,為什么我們不在Linux中增強(qiáng)一些有用的命令?
“ wc -l
”:計(jì)算行數(shù)
“ wc -w
”:計(jì)算單詞數(shù)
“ wc -m
”:計(jì)算字符數(shù)
第2行:聲明并初始化變量長(zhǎng)度。
第3行:定義函數(shù)string_length。
第4行和第6行:功能代碼塊分隔符。
第5行:函數(shù)內(nèi)唯一的代碼行:
length =`echo -n $ 1 | wc -m`
傳遞給函數(shù)$ 1的參數(shù)使用echo命令打印,該命令選項(xiàng) –n
可防止echo在末尾插入換行符。
命令echo的輸出通過(guò)–n $1
管道傳輸?shù)矫?nbsp; 的輸入流 wc –m
(它對(duì)輸入中的字符進(jìn)行計(jì)數(shù))。
上面復(fù)合語(yǔ)句的結(jié)果是echo -n $ 1 | wc -m被賦予(通過(guò)使用反引號(hào)'')到可變長(zhǎng)度。
第7行:從用戶讀取輸入字符串,并將其分配給變量 STR
。
第8行:調(diào)用 string_length
函數(shù)并將變量傳遞 STR
給它。調(diào)用該函數(shù)的結(jié)果是估計(jì)STR的長(zhǎng)度并將計(jì)算的長(zhǎng)度存儲(chǔ)在可變長(zhǎng)度中。
第9行:將結(jié)果打印給用戶。
Bash函數(shù)可以使用關(guān)鍵字return將函數(shù)的局部變量的值傳遞給主例程。然后將返回的值存儲(chǔ)到默認(rèn)變量$?我們來(lái)舉個(gè)例子:
我們將參數(shù)int1和int2傳遞給add函數(shù)。接下來(lái),該 add
函數(shù)通過(guò)該行處理它 sum=$(($1+$2))
。然后sum變量的值通過(guò)該行傳遞給主程序 return $sum
。默認(rèn)情況下,值 $sum
將存儲(chǔ)到默認(rèn)變量 $
?最后,行echo "The result is: " $?
顯示結(jié)果。
注意:Shell腳本只能返回單個(gè)值。
遞歸函數(shù)意味著在函數(shù)定義中,并且在函數(shù)的代碼內(nèi)部,調(diào)用語(yǔ)句可以出現(xiàn)調(diào)用函數(shù)(被定義)本身。這應(yīng)該由測(cè)試條件控制,以確保功能將收斂。如果沒(méi)有指定條件,或者使用了錯(cuò)誤的條件,該函數(shù)將永遠(yuǎn)調(diào)用自身。
現(xiàn)在使用一個(gè)因子示例來(lái)增強(qiáng)此遞歸函數(shù):
result=1
:此行將變量result初始化為1
factorial_function
.:聲明階乘函數(shù)。
函數(shù)體Staring delimiter {
if [$ 1 -gt1]; 然后檢查提供給函數(shù)的參數(shù)是否大于1.
如果是,則執(zhí)行以下兩行:
let “result *= $1”
:這將結(jié)果的當(dāng)前值乘以傳遞給函數(shù)的參數(shù)。
factorial $(($1-1))
:這以遞歸方式調(diào)用階乘函數(shù),并以$ 1-1作為參數(shù)傳遞給它。
函數(shù)體關(guān)閉分隔符}
聲明函數(shù)后,這又是主腳本代碼:
factorial $1
主腳本調(diào)用階乘函數(shù)并將傳遞給腳本$ 1的命令行參數(shù)傳遞給它。不要混淆代表第一個(gè)命令行參數(shù)的$ 1和代表傳遞給函數(shù)的第一個(gè)參數(shù)的$ 1。
最后一行將結(jié)果打印給用戶。
1.首先,將結(jié)果變量設(shè)置為1.
2.解釋器遇到函數(shù)定義。
3.使用參數(shù)4調(diào)用該函數(shù)??丶⑥D(zhuǎn)移到按以下方式工作的函數(shù):
a)如果參數(shù)大于1(這是大小寫),則檢查參數(shù)(現(xiàn)在為4)。如果是,則執(zhí)行以下兩行:
i)完成通常的累加乘法運(yùn)算:結(jié)果乘以參數(shù)$ 1,結(jié)果存儲(chǔ)在變量結(jié)果中。
ii)階乘函數(shù)被稱為“遞歸地”并且作為參數(shù)傳遞3。控制再次轉(zhuǎn)移到階乘函數(shù),其參數(shù)現(xiàn)在為3。
b)如果參數(shù)“3”大于1(這是大小寫),則檢查參數(shù)“3”。如果是,則執(zhí)行上述兩個(gè)步驟(i和ii)。步驟ii再次調(diào)用階乘函數(shù),其中2為參數(shù)。
c)這一直持續(xù)到使用參數(shù)1調(diào)用階乘函數(shù)。此時(shí),if條件失敗,并且函數(shù)終止。
4.控件返回主腳本,執(zhí)行函數(shù)調(diào)用后的第一行(即將結(jié)果打印給用戶的echo命令)。
“Shell腳本中的函數(shù)怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)站名稱:Shell腳本中的函數(shù)怎么使用-創(chuàng)新互聯(lián)
URL標(biāo)題:http://sd-ha.com/article42/podhc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、云服務(wù)器、ChatGPT、做網(wǎng)站、網(wǎng)站制作、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容