RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

BASH shell腳本篇—函數(shù)

冬至子 ? 來源:CSDN ? 作者:谷公子 ? 2023-10-20 16:31 ? 次閱讀

函數(shù)是代碼重用的最重要方式。Bash函數(shù)可以定義為一組命令,在bash腳本中多次調(diào)用。

bash函數(shù)使腳本更具可讀性,并避免一次又一次地編寫相同的代碼。它還允許開發(fā)人員將復(fù)雜而冗長的代碼分解為小部分,可以在需要時調(diào)用它們??梢噪S時重復(fù)調(diào)用函數(shù),這樣就能夠重用,優(yōu)化和最小化代碼。

1. 函數(shù)聲明

bash函數(shù)必須先聲明,然后才能使用它。函數(shù)的聲明有兩種格式:

# 第一種方法:以函數(shù)名稱開頭,后跟括號。
function_name () {  
   commands  
}
 
# 第二種方法:以函數(shù)保留字開頭,后跟函數(shù)名稱。
function function_name {  
    commands  
}

2. 函數(shù)參數(shù)

可以往bash函數(shù)中傳遞參數(shù)來處理數(shù)據(jù),只需要把要傳遞的數(shù)據(jù)放在調(diào)用的函數(shù)名稱之后,在函數(shù)名稱和參數(shù)之間使用空格,為了防止參數(shù)解析錯誤,建議在參數(shù)周圍使用雙引號。

給定的參數(shù)以$1,$2,$3,...$n的形式訪問,對應(yīng)于函數(shù)名后參數(shù)的位置。

$0變量的值是函數(shù)的名稱。

$#變量用于保存賦予函數(shù)的位置參數(shù)的數(shù)量。

*** 和**@ 變量用于保存賦予函數(shù)的所有參數(shù)。當(dāng)** * 與雙引號(即"** * ")一起使用時,它將擴(kuò)展為一個由空格分隔的字符串。例如,"$1 $2 n"等。當(dāng)@與雙引號(即"** @")一起使用時,它將擴(kuò)展為單獨的字符串。例如,"$1" "$2" "n"等。當(dāng)*#不與雙引號一起使用時,它們都是相同的。

例子如下:

# The script is:
function_name () {
    echo "the function is called"
    echo '$0 is' $0
    echo '$1 is' $1
    echo '$2 is' $2
    echo '$# is' $#
    echo '$*' is $*
    echo '$@' is $@
}
function_name first second third
 
# The result is:
the function is called
$0 is ./bash_ex.sh
$1 is first
$2 is second
$# is 3
$* is first second third
$@ is first second third

3. 函數(shù)返回值

Bash函數(shù)不提供在調(diào)用時返回值的支持,但是,它們允許設(shè)置返回狀態(tài),這種狀態(tài)類似于程序或命令如何以退出狀態(tài)退出。bash函數(shù)完成時,其返回值是函數(shù)中最后執(zhí)行的語句的狀態(tài)。對于成功狀態(tài),它將返回0,對于失敗,將返回1-255范圍內(nèi)的非零十進(jìn)制數(shù)。

可以使用關(guān)鍵字return指示返回狀態(tài),并將它分配給變量$?。return語句終止函數(shù)并用作函數(shù)的退出狀態(tài)。

例子如下:

# The script is:
func_return () {
    echo "the function is called"
    return 6
}
func_return
echo "func_return status: $?"
 
# The result is:
the function is called
func_return status: 6

從函數(shù)返回值的另一個更好的選擇是使用echo或printf命令將打印值發(fā)送到stdout,如下腳本代碼所示:

# The script is:
func_print () {  
    local it="Welcome!!!"  
    echo "$it"  
}  
my="$(func_print)"  
echo $my
 
# The result is:
Welcome!!!

4. 變量的作用域

全局變量定義為可以在腳本內(nèi)的任意位置訪問的變量,而不管它的范圍如何。默認(rèn)情況下,所有變量都定義為全局變量,即使它們在函數(shù)內(nèi)部聲明也是如此。

還可以將變量創(chuàng)建為局部變量??梢允褂胠ocal關(guān)鍵字在函數(shù)體內(nèi)聲明局部變量。首次分配關(guān)鍵字時。

它們只能在該函數(shù)內(nèi)部訪問??梢栽诓煌暮瘮?shù)中創(chuàng)建具有相同名稱的局部變量。要添加局部變量,語法如下:

local var_name=< var_value >

例子如下:

# The script is:
v1='A'  
v2='B'  
test_local_var () {  
    local v1='C'  
    v2='D'  
    echo "test_local_var Function"  
    echo "v1 is $v1."  
    echo "v2 is $v2."  
}  
echo "Before Executing the Function"  
echo "v1 is $v1."  
echo "v2 is $v2."  
test_local_var 
echo "After Executing the Function"  
echo "v1 is $v1."  
echo "v2 is $v2."
 
# The result is:
Before Executing the Function
v1 is A.
v2 is B.
test_local_var Function
v1 is C.
v2 is D.
After Executing the Function
v1 is A.
v2 is D.

5. 覆蓋命令

可以通過創(chuàng)建與要覆蓋的命令同名的函數(shù)來覆蓋bash命令。例如,如果想覆蓋echo命令,那么只需要創(chuàng)建一個名稱為echo的函數(shù)即可。

覆蓋bash命令的概念在某些情況下可能會很有用,例如當(dāng)要使用帶有特定選項的命令時,或者當(dāng)我們不喜歡在腳本中多次為整個命令提供選項時。在這種情況下,可以將內(nèi)置bash命令覆蓋為帶選項的命令。

例子如下:

# The script is:
echo () {  
    builtin echo -n `date +"[%m-%d %H:%M:%S]"` ": "  
    builtin echo $1  
}  
echo "Welcome to Official Accounts"
 
# The result is:
[09-29 21:56:10] : Welcome to Official Accounts

從上面例子可以看出,echo輸出會附帶上時間信息

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    365

    瀏覽量

    23354
  • bash終端
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    1992
收藏 人收藏

    評論

    相關(guān)推薦

    shell腳本進(jìn)階】幾個常用的shell進(jìn)階腳本

    shell腳本進(jìn)階】幾個常用的shell進(jìn)階腳本
    的頭像 發(fā)表于 09-19 08:59 ?1879次閱讀
    【<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>進(jìn)階】幾個常用的<b class='flag-5'>shell</b>進(jìn)階<b class='flag-5'>腳本</b>

    如何在bash shell腳本中使用變量

    如果你使用編程語言編寫過程序,那么一定接觸過變量。而在 bash 腳本的編寫時,變量也是一個很重要的概念。今天我們分享一下如何在 bash 腳本中使用變量。
    發(fā)表于 12-02 16:32 ?2101次閱讀
    如何在<b class='flag-5'>bash</b> <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>中使用變量

    高級Bash 腳本編程指南

    高級Bash 腳本編程指南
    發(fā)表于 10-26 08:33 ?7次下載
    高級<b class='flag-5'>Bash</b> <b class='flag-5'>腳本</b>編程指南

    虛擬機(jī):Bash Shell腳本打印出執(zhí)行的命令

    默認(rèn)情況下,bash腳本不會打印執(zhí)行的每個命令,這個有時候不太方面。
    的頭像 發(fā)表于 06-22 14:44 ?4545次閱讀

    【RT-Thread學(xué)習(xí)筆記】bash和dash-shell

    ? 最近在工作中遇到一個很奇葩的問題,就是一個嵌入式的SDK編譯,它里面執(zhí)行shell命令的時候,使用的dash shell來解析,而通常我們默認(rèn)用的是bash shell來解析;我按
    的頭像 發(fā)表于 07-30 13:49 ?1198次閱讀
    【RT-Thread學(xué)習(xí)筆記】<b class='flag-5'>bash</b>和dash-<b class='flag-5'>shell</b>

    Raspberry Pi Bash Shell 腳本簡介

      拋開潛在的麻煩不談,Bash 可以是一個非常強大的工具,讓您可以自動執(zhí)行各種任務(wù)。在即將發(fā)表的文章中,我將展示如何使用 Bash 腳本以及一些硬件技巧來自動化我的 Raspberry Pi 冷卻風(fēng)扇。
    的頭像 發(fā)表于 08-15 15:08 ?1191次閱讀
    Raspberry Pi <b class='flag-5'>Bash</b> <b class='flag-5'>Shell</b> <b class='flag-5'>腳本</b>簡介

    如何在bash shell腳本中接受參數(shù)

    終端命令通常包含一些參數(shù),在使用的時候可以提供不同的參數(shù)來確定命令的執(zhí)行方式。POSIX規(guī)范中包含了用于命令行接口的選項。這也是與最早的UNIX應(yīng)用程序建立的一個由來已久的約定,所以當(dāng)你在寫bash腳本的時候,需要知道如何在腳本
    的頭像 發(fā)表于 12-09 17:34 ?2705次閱讀

    bash腳本中的循環(huán)功能

    循環(huán)是 bash 腳本中一個很重要的功能,用途廣泛。本篇文章我們介紹三種不同的循環(huán),然后利用循環(huán)遍歷數(shù)組。
    的頭像 發(fā)表于 12-14 17:30 ?3595次閱讀

    shell腳本基礎(chǔ)函數(shù)

    bash中定義函數(shù) function和函數(shù)名字可以任意省略一個 需要注意的是,函數(shù)必須在被調(diào)用之前定義 如果沒有特別標(biāo)注,bash中的變量
    的頭像 發(fā)表于 05-22 09:20 ?475次閱讀
    <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>基礎(chǔ)<b class='flag-5'>函數(shù)</b>

    BASH shell腳本篇—條件命令

    這篇文章介紹下BASH shell中的條件相關(guān)的命令,包括:if, case, while, until, for, break, continue。
    的頭像 發(fā)表于 10-11 15:21 ?616次閱讀
    <b class='flag-5'>BASH</b> <b class='flag-5'>shell</b><b class='flag-5'>腳本篇</b>—條件命令

    BASH shell腳本篇—字符串處理

    Bash字符串也是一種數(shù)據(jù)類型,它用于表示文本而不是數(shù)字,它是一組可能還包含數(shù)字的字符的組合。
    的頭像 發(fā)表于 10-16 11:25 ?937次閱讀

    BASH shell腳本篇—文件處理介紹

    Bash Shell腳本中,可以使用多種方法來對文件進(jìn)行操作,包括讀取文件或?qū)懭胛募?/div>
    的頭像 發(fā)表于 10-23 16:51 ?619次閱讀

    shell并行調(diào)用腳本

    Shell腳本中,可以使用一些技巧來實現(xiàn)并行調(diào)用。以下是幾種常見的方法: 使用后臺進(jìn)程:在Shell腳本中,可以使用"command2 上述腳本
    的頭像 發(fā)表于 11-08 10:23 ?948次閱讀

    Shell腳本檢查工具ShellCheck介紹

    ShellCheck是一個用于bash/sh shell腳本的靜態(tài)分析工具,可以輔助檢查腳本語法錯誤,給出建議增強腳本健壯性。
    的頭像 發(fā)表于 12-27 13:43 ?2101次閱讀
    <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>檢查工具ShellCheck介紹

    執(zhí)行shell腳本的方式包括什么

    執(zhí)行Shell腳本的方式有很多種,以下是一些常見的方法: 直接運行腳本文件 在命令行中,可以直接使用腳本文件的路徑來運行腳本。例如: ./s
    的頭像 發(fā)表于 08-30 15:17 ?316次閱讀
    RM新时代网站-首页