共計 3434 個字符,預計需要花費 9 分鐘才能閱讀完成。
本篇內容介紹了“Shell 腳本中的函數怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Shell 腳本中的功能是什么?
函數是一組命令,這些命令被賦予一個名稱,該名稱的作用類似于該組命令的句柄。要執行函數中定義的這組命令,只需使用您提供的名稱調用該函數即可。
在某些情況下,您需要執行一個代碼塊,該代碼塊在 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 函數返回
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 腳本中的函數怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!