您好,登錄后才能下訂單哦!
本篇內容介紹了“Shell腳本中的函數怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
函數是一組命令,這些命令被賦予一個名稱,該名稱的作用類似于該組命令的句柄。要執行函數中定義的這組命令,只需使用您提供的名稱調用該函數即可。
在某些情況下,您需要執行一個代碼塊,該代碼塊在shell腳本的不同位置執行多次特定過程。Shell函數類似于其他編程語言中的子例程,過程和函數。
?它有助于我們重用代碼。
?提高程序的可讀性。
?在程序內有效使用變量。
?允許我們逐個測試程序。
?將程序顯示為一系列子步驟。
要使用的語法:
Syntax1:
function function_name
{
###命令集
}
Syntax2:
函數名()
{
####命令集
}
function是聲明函數定義的關鍵工作。
function_name是聲明的函數的名稱。
Curly braces {}充當包含函數代碼的分隔符。
命令集是調用函數時要執行的代碼。
因此,首先聲明一個函數,然后在需要時調用它。
在第一種語法中,您必須使用關鍵字函數,后跟函數名稱以及打開和關閉括號和花括號,以將函數的內容與主例程分開。
在第二種語法中,由函數名稱,開括號和閉括號以及花括號組成。
我們有一些shell腳本示例:
在這個例子中,我們將編寫一個非常小的函數,用“----”打印一行
讓我們看看它是如何工作的:
第1行:聲明函數 print_line
。
第2行和第4行:{ }
用于分隔函數體的花括號 。
第3行:函數體中唯一的語句:使用echo命令打印一行“---”字符。
第5行:調用該 print_line
函數。
第6行:打印提供的參數 $1
。
第7行:print_line
再次調用該 函數。
注意:$1
在上面的示例中,“ ”將采用以下值,您將在執行腳本時給出參數。
1) 打印“歡迎使用自動化實驗室”(它將使用雙引號打印整個聲明)2) 打印“歡迎使用”(它將僅顯示“收件人”聲明)3) 打印“歡迎”(它將打印只歡迎)./function.sh “To Automation Laboratories”
./function.sh To Automation Laboratories
./function.sh (without any argument)
讓我們再來看一個例子:
創建后功能 myfunction的,它然后通過調用其調用函數的名字我們的主程序。主例程將在我們的腳本中的任何位置,未定義為我們的函數的一部分。
#!/斌/慶典
MyFunction的()
{
回聲 “哦!實際上,它的工作原理“
}
MyFunction的
現在讓我們重新安排我們的代碼來測試函數是否可以在我們的腳本中的任何地方聲明。
#!/斌/慶典
回聲 “用于測試”
MyFunction的
MyFunction的()
{
回聲 “哦!實際上,它的工作原理“
}
線3 在上面的代碼段返回沒有發現錯誤的命令。這只意味著:
該功能只適用,如果它是你的主程序之前聲明。如果您在主程序之后聲明了您的功能,則解釋器將返回錯誤。
在函數上傳遞參數
您可以在 bash 函數中傳遞參數并處理這些數據。下面的代碼顯示了如何在 shell腳本中傳遞值的過程:
#!/斌/慶典
MyFunction的()
{
echo “第一個參數是$ 1 ”
echo “第二個參數是$ 2 ”
}
myfunction“你好”“世界”
讓我們理解以上內容:
在我們調用之后,我們添加了值“Hello”和“World” myfunction
。
這些值作為參數傳遞給myfunction并存儲在局部變量中。
解釋器將傳遞的值存儲到預定義變量中,這些變量根據傳遞參數的順序命名,1作為起始名稱直到傳遞順序。
請注意,“Hello”字存儲在變量1中,值“World”存儲在變量2中。
注意:上面的1和2是局部變量,因此,除了傳遞參數的函數之外,腳本的其他部分都無法訪問它們。
讓我們通過下面的例子來識別上面的注意事項:
#!/斌/慶典
MyFunction的()
{
echo “第一個參數是$ 1 ”
echo “第二個參數是$ 2 ”
}
myfunction“你好”“世界”
回聲 $ 1
回聲 $ 2
在 echo $1
和 echo $2
我們的腳本的最后兩行沒有顯示,因為解釋不承認這兩個變量,因為它們都是局部給myFunction。
讓我們通過再舉一個例子來更清楚地了解這一點:
我們將編寫一個估計字符串長度的函數。該字符串將作為參數提供給函數。讓我們'看看它會是怎樣的。
嗯...在此之前,為什么我們不在Linux中增強一些有用的命令?
“ wc -l
”:計算行數
“ wc -w
”:計算單詞數
“ wc -m
”:計算字符數
第2行:聲明并初始化變量長度。
第3行:定義函數string_length。
第4行和第6行:功能代碼塊分隔符。
第5行:函數內唯一的代碼行:
length =`echo -n $ 1 | wc -m`
傳遞給函數$ 1的參數使用echo命令打印,該命令選項 –n
可防止echo在末尾插入換行符。
命令echo的輸出通過–n $1
管道傳輸到命令 的輸入流 wc –m
(它對輸入中的字符進行計數)。
上面復合語句的結果是echo -n $ 1 | wc -m被賦予(通過使用反引號'')到可變長度。
第7行:從用戶讀取輸入字符串,并將其分配給變量 STR
。
第8行:調用 string_length
函數并將變量傳遞 STR
給它。調用該函數的結果是估計STR的長度并將計算的長度存儲在可變長度中。
第9行:將結果打印給用戶。
Bash函數可以使用關鍵字return將函數的局部變量的值傳遞給主例程。然后將返回的值存儲到默認變量$?我們來舉個例子:
我們將參數int1和int2傳遞給add函數。接下來,該 add
函數通過該行處理它 sum=$(($1+$2))
。然后sum變量的值通過該行傳遞給主程序 return $sum
。默認情況下,值 $sum
將存儲到默認變量 $
?最后,行echo "The result is: " $?
顯示結果。
注意:Shell腳本只能返回單個值。
遞歸函數意味著在函數定義中,并且在函數的代碼內部,調用語句可以出現調用函數(被定義)本身。這應該由測試條件控制,以確保功能將收斂。如果沒有指定條件,或者使用了錯誤的條件,該函數將永遠調用自身。
現在使用一個因子示例來增強此遞歸函數:
result=1
:此行將變量result初始化為1
factorial_function
.:聲明階乘函數。
函數體Staring delimiter {
if [$ 1 -gt1]; 然后檢查提供給函數的參數是否大于1.
如果是,則執行以下兩行:
let “result *= $1”
:這將結果的當前值乘以傳遞給函數的參數。
factorial $(($1-1))
:這以遞歸方式調用階乘函數,并以$ 1-1作為參數傳遞給它。
函數體關閉分隔符}
聲明函數后,這又是主腳本代碼:
factorial $1
主腳本調用階乘函數并將傳遞給腳本$ 1的命令行參數傳遞給它。不要混淆代表第一個命令行參數的$ 1和代表傳遞給函數的第一個參數的$ 1。
最后一行將結果打印給用戶。
1.首先,將結果變量設置為1.
2.解釋器遇到函數定義。
3.使用參數4調用該函數。控件將轉移到按以下方式工作的函數:
a)如果參數大于1(這是大小寫),則檢查參數(現在為4)。如果是,則執行以下兩行:
i)完成通常的累加乘法運算:結果乘以參數$ 1,結果存儲在變量結果中。
ii)階乘函數被稱為“遞歸地”并且作為參數傳遞3。控制再次轉移到階乘函數,其參數現在為3。
b)如果參數“3”大于1(這是大小寫),則檢查參數“3”。如果是,則執行上述兩個步驟(i和ii)。步驟ii再次調用階乘函數,其中2為參數。
c)這一直持續到使用參數1調用階乘函數。此時,if條件失敗,并且函數終止。
4.控件返回主腳本,執行函數調用后的第一行(即將結果打印給用戶的echo命令)。
“Shell腳本中的函數怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。