chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

在bash中如何創(chuàng)建函數(shù)

CHANBAEK ? 來(lái)源:TIAP ? 作者:TIAP ? 2022-12-14 17:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

當(dāng)你的 bash 腳本中代碼非常多的時(shí)候,會(huì)看起來(lái)很混亂,其中有部分代碼有可能是重復(fù)的。這個(gè)時(shí)候,可以使用函數(shù)來(lái)避免重復(fù)的代碼。

今天我們將介紹在 bash 中如何創(chuàng)建函數(shù),以及函數(shù)中的返回值、傳遞參數(shù)等內(nèi)容。

在 bash 中創(chuàng)建函數(shù)

創(chuàng)建 bash 函數(shù)有兩種不同的語(yǔ)法。最常用的方法如下:

function_name () {
    commands
}

第二種方法不太常用,如下所示:

function function_name {
    commands
}

在使用函數(shù)時(shí),需要注意以下幾點(diǎn):

  • 除非被調(diào)用,否則函數(shù)永遠(yuǎn)不會(huì)被執(zhí)行;
  • 函數(shù)必須先定義,然后才能被調(diào)用。

作為演示,我們創(chuàng)建一個(gè) fun.sh 腳本,如下代碼:

#!/bin/bash


hello () {
echo "Hello World"
}


hello
hello
hello

上述腳本中,我們定義了一個(gè)名為 hello 的函數(shù),它將在終端上打印 Hello World。后面我們調(diào)用了三次 hello 函數(shù),因此,運(yùn)行腳本后,你會(huì)在屏幕上看到 Hello World 打印了三次:

$ ./fun.sh
Hello World
Hello World
Hello World

函數(shù)的返回值

在很多編程語(yǔ)言中,函數(shù)在調(diào)用時(shí)都會(huì)返回一個(gè)值,然而,在 bash 函數(shù)中沒(méi)有返回值。

當(dāng)函數(shù)執(zhí)行完成時(shí),會(huì)返回一個(gè) $? 變量作為退出狀態(tài),0 表示成功執(zhí)行,其他非零正整數(shù)(1 - 255)表示執(zhí)行失敗。

我們來(lái)寫(xiě)一個(gè)例子,命名為 error.sh,在其中寫(xiě)一個(gè) return 語(yǔ)句,如下代碼所示:

#! /bin/bash


error () {
blabla
return 0
}


error
echo "The return status of the error function is: $?"

執(zhí)行結(jié)果如下:

$ ./error.sh
./error.sh: line 4: blabla: command not found
The return status of the error function is: 0

因?yàn)橛?return 0 這一行,所以即使函數(shù)中有 blabla 這一行的報(bào)錯(cuò),error 函數(shù)還是返回了一個(gè)執(zhí)行成功的狀態(tài)碼 0。

return 語(yǔ)句執(zhí)行后,函數(shù)會(huì)被立即終止。

向 bash 函數(shù)傳遞參數(shù)

我們可以向函數(shù)傳遞參數(shù),就像向 bash 腳本傳遞參數(shù)一樣。

作為演示,我們創(chuàng)建一個(gè)名為 iseven.sh 的腳本,如下所示:

#!/bin/bash


iseven () {
    if [ $(($1 % 2)) -eq 0 ]; then
        echo "$1 is even."
    else
        echo "$1 is odd."
    fi
}


iseven 3
iseven 4
iseven 20
iseven 111

iseven() 函數(shù)判斷數(shù)字是偶數(shù)還是奇數(shù)。在調(diào)用的時(shí)候,將參數(shù)放在函數(shù)名后面,函數(shù)執(zhí)行的時(shí)候會(huì)讀取 $1 來(lái)獲取傳遞的參數(shù)。我們來(lái)執(zhí)行一下:

$ ./iseven.sh
3 is odd.
4 is even.
20 is even.
111 is odd.

這里需要注意,bash 函數(shù)中的參數(shù),和 bash 腳本的參數(shù)需要區(qū)分開(kāi)來(lái),看如下 funarg.sh 腳本:

#!/bin/bash


fun () {
echo "$1 is the first argument to fun()"
echo "$2 is the second argument to fun()"
}


echo "$1 is the first argument to the script."
echo "$2 is the second argument to the script."


fun Yes 7

執(zhí)行結(jié)果如下:

$ ./funarg.sh Cool Stuff
Cool is the first argument to the script.
Stuff is the second argument to the script.
Yes is the first argument to fun()7 is the second argument to fun()

可以看到,同樣是使用 $1 和 $2 來(lái)引用腳本參數(shù)和函數(shù)參數(shù),當(dāng)實(shí)際調(diào)用時(shí),取值是不同的。

bash 函數(shù)中的全局變量和局部變量

與大多數(shù)編程語(yǔ)言累死,bash 變量具有全局變量和局部變量之分。其中全局變量可以在任何位置方位到,而局部變量只能在其定義的函數(shù)中訪問(wèn)。

作為演示,看如下 scope.sh 腳本:

#!/bin/bash


v1='A'
v2='B'


myfun() {
    local v1='C'
    v2='D'
    echo "Inside myfun(): v1: $v1, v2: $v2"
}


echo "Before calling myfun(): v1: $v1, v2: $v2"
myfun
echo "After calling myfun(): v1: $v1, v2: $v2"

我們首先定義了兩個(gè)全局變量 **v1 v2 ,然后在 函數(shù) myfun() 中,使用 local 關(guān)鍵字 定義了一個(gè)局部變量 ** v1 ,并修改了全局變量 v2 。在不同的函數(shù)中,局部變量可以使用相同的變量名。

執(zhí)行一下,結(jié)果如下:

$ ./scope.sh
Before calling myfun(): v1: A, v2: B
Inside myfun(): v1: C, v2: D
After calling myfun(): v1: A, v2: D

由此,我們可以看到:

  • 如果局部變量的變量名與全局變量的變量名相同,那么局部變量?jī)?yōu)先級(jí)會(huì)更高;
  • 在函數(shù)中可以更改全局變量的值。

遞歸函數(shù)

遞歸函數(shù)是一個(gè)調(diào)用自身的函數(shù)。階乘計(jì)算是遞歸函數(shù)的經(jīng)典例子,看下面的腳本 factorial.sh:

#!/bin/bash


factorial () {
    if [ $1 -le 1 ]; then
        echo 1
    else
        last=$(factorial $(( $1 -1)))
        echo $(( $1 * last ))
    fi
}


echo -n "4! is: "
factorial 4
echo -n "5! is: "
factorial 5
echo -n "6! is: "
factorial 6

任何遞歸函數(shù)都要從一個(gè)基本條件開(kāi)始,這個(gè)基本條件必須可以結(jié)束遞歸函數(shù)調(diào)用鏈。在 factorial() 函數(shù)中,基本條件為:

if [ $1 -le 1 ]; then
    echo 1

然后導(dǎo)出階乘函數(shù)的遞歸情況。要計(jì)算 n 的階乘,其中 n 是大于 1 的正數(shù),可以將 n 乘以 n-1 的階乘:

factorial(n) = n * factorial(n-1)

使用上面那個(gè)公式來(lái)編寫(xiě)遞歸函數(shù)的算法

last=$(factorial $(( $1 -1)))
    echo $(( $1 * last ))

然后運(yùn)行一下,檢查運(yùn)行結(jié)果:

$ ./factorial.sh
4! is: 24
5! is: 120
6! is: 720
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4405

    瀏覽量

    66792
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    407

    瀏覽量

    29046
  • Bash
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    10676
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何在bash腳本創(chuàng)建第一個(gè)數(shù)組

    在前面的文章,我們介紹了如何在 bash 中使用有限數(shù)量的變量,比如要保存一個(gè)或兩個(gè)文件名或用戶名。
    發(fā)表于 12-02 16:53 ?1090次閱讀
    如何在<b class='flag-5'>bash</b>腳本<b class='flag-5'>中</b><b class='flag-5'>創(chuàng)建</b>第一個(gè)數(shù)組

    labview創(chuàng)建文件函數(shù)時(shí)出現(xiàn) memory is full 的問(wèn)題

    `labview創(chuàng)建文件函數(shù)時(shí)出現(xiàn) memory is full 的問(wèn)題,這個(gè)問(wèn)題是不是由于沒(méi)有加入關(guān)閉文件函數(shù)引起的呢`
    發(fā)表于 12-25 14:12

    為什么UCOSIII外部中斷服務(wù)函數(shù)不能開(kāi)啟已經(jīng)創(chuàng)建的軟件定時(shí)器?

    一個(gè)外部中斷服務(wù)函數(shù),開(kāi)啟一個(gè)已經(jīng)創(chuàng)建的軟件定時(shí)器,會(huì)開(kāi)啟不成功返回的錯(cuò)誤碼:OS_ERR_TMR_ISR錯(cuò)誤碼說(shuō)明:if the call was made from an IS
    發(fā)表于 06-02 14:13

    C語(yǔ)言入門(mén)教程-創(chuàng)建一個(gè)函數(shù)庫(kù)

    創(chuàng)建一個(gè)函數(shù)庫(kù) 上述程序的rand和bubble_sort函數(shù)很實(shí)用,很可能在您寫(xiě)其他程序時(shí)也能派上用場(chǎng)。為了能更方便地重復(fù)使用,您可以為它們創(chuàng)
    發(fā)表于 07-29 11:18 ?3270次閱讀

    10個(gè)方便的Bash別名

    要使用你創(chuàng)建Bash 別名,你需要將其添加到 .bash_profile ,該文件位于你的家目錄。請(qǐng)注意,此文件是隱藏的,并只能從命
    的頭像 發(fā)表于 10-16 15:00 ?3044次閱讀

    怎樣MATLAB創(chuàng)建函數(shù)

    。如果這樣做不能解決問(wèn)題,請(qǐng)?jiān)凇澳_本窗口”重新打開(kāi)函數(shù),并確保沒(méi)有錯(cuò)誤。代碼正確輸出后,您將成功創(chuàng)建您的第一個(gè)MATLAB函數(shù)!
    的頭像 發(fā)表于 11-04 11:07 ?2.2w次閱讀
    怎樣<b class='flag-5'>在</b>MATLAB<b class='flag-5'>中</b><b class='flag-5'>創(chuàng)建</b><b class='flag-5'>函數(shù)</b>

    fork函數(shù)的作用_fork函數(shù)創(chuàng)建進(jìn)程

     Linuxfork函數(shù)是非常重要的函數(shù),它的作用是從已經(jīng)存在的進(jìn)程創(chuàng)建一個(gè)子進(jìn)程,而原進(jìn)
    發(fā)表于 12-01 13:41 ?8565次閱讀
    fork<b class='flag-5'>函數(shù)</b>的作用_fork<b class='flag-5'>函數(shù)</b><b class='flag-5'>創(chuàng)建</b>進(jìn)程

    Bash 中比較 $() 與 ${}

    像 Linux 這樣的基于 GNU 的操作系統(tǒng)依賴于一個(gè)名為 Bash 的命令語(yǔ)言解釋器或 Shell 來(lái)完成它們的大部分計(jì)算任務(wù)和目標(biāo)。
    的頭像 發(fā)表于 09-09 09:24 ?1002次閱讀

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

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

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

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

    Bash腳本特殊變量$0是什么?

    Bash 腳本,`$0` 是一個(gè)特殊變量,它代表當(dāng)前腳本的路徑和名稱。這個(gè)變量用于表示腳本自身,它是 Bash 環(huán)境的一個(gè)重要組成部
    的頭像 發(fā)表于 05-12 14:41 ?2307次閱讀

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

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

    linux操作系統(tǒng)的進(jìn)程創(chuàng)建和銷毀函數(shù)解析

    第一次遇見(jiàn)創(chuàng)建進(jìn)程是Linux啟動(dòng)流程,reset_init函數(shù)調(diào)用kernel_thread函數(shù)創(chuàng)
    發(fā)表于 06-26 09:12 ?1094次閱讀
    linux操作系統(tǒng)<b class='flag-5'>中</b>的進(jìn)程<b class='flag-5'>創(chuàng)建</b>和銷毀<b class='flag-5'>函數(shù)</b>解析

    bash如何進(jìn)行各種文件重定向呢?

    本文會(huì)用以下測(cè)試程序,來(lái)演示bash,如何進(jìn)行各種文件重定向
    的頭像 發(fā)表于 08-25 09:31 ?1864次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>bash</b><b class='flag-5'>中</b>如何進(jìn)行各種文件重定向呢?

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

    函數(shù)是代碼重用的最重要方式。Bash函數(shù)可以定義為一組命令,bash腳本多次調(diào)用。
    的頭像 發(fā)表于 10-20 16:31 ?1734次閱讀