shell函數(shù)定義和引用

shell腳本中函數(shù)的定義和使用

Bash(Bourne Again shell)跟其他編程語言一樣也支持函數(shù),一般在編寫大型腳本中需要用到,它可以將Shell腳本程序劃分成一個個功能相對獨立的代碼塊,使代碼的模塊化更好,結構更加清晰,并可以有效地減少程序的代碼量。但是bash作為一種解釋性語言,bash 在編程能力方面提供的支持并不像其他編譯性的語言(例如 C 語言)那樣完善,執(zhí)行效率也會低很多。

定義

格式1

function name() {

Command sequence(命令序列);

}

格式2

name() {

Command sequence(命令序列);

}

可以帶function name()定義,也可以直接name()定義,不帶任何參數(shù)。

執(zhí)行

name;

直接使用函數(shù)名稱即可調用某個函數(shù)。

傳遞參數(shù)

#!/bin/bash

aa="this is aa"

bb="this is bb"

function name() {? ? ? ? ? ? ? ? ? #定義函數(shù)name

local cc="this is cc"? ? ? #定義局部變量$cc

local dd="this is dd"? ? ? #定義局部變量$dd

echo $aa, $bb? ? ? ? ? ? ? #訪問參數(shù)1和參數(shù)2

echo $cc? ? ? ? ? ? ? ? ? #打印局部變量

return 0? ? ? ? ? ? ? ? ? #shell函數(shù)返回值是整形,并且在0~257之間。

}

echo $dd? ? ? ? ? ? ? ? ? ? ? ? ? #這里將會打印不生效,因為dd是局部變量。

name? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #使用函數(shù)name

上例中:

?aa 和 bb 定義的是全局變量。

?cc 和 dd 定義的是局部變量,只能在函數(shù) name 中使用。

?$aa是第一個參數(shù)$1,$bb是第一個參數(shù)$2,以此類推$n是第n個參數(shù)$n。

?$@是獲取腳本調用時的傳入?yún)?shù)列表。

?return 0參數(shù)返回,可以顯示加:return 返回,如果不加,將以最后一條命令運行結果作為返回值。

.

遞歸函數(shù)

bash也支持遞歸函數(shù)(能夠調用自身的函數(shù))例如:

#!/bin/bash

function name() {

echo $1

name hello

sleep 1

}

name

運行此腳本后不斷打印出hello,按Ctrl+C結束。

遞歸經(jīng)典:fork 炸彈

可能很多人都曾經(jīng)聽說過 fork 炸彈,它實際上只是一個非常簡單的遞歸程序,程序所做的事情只有一樣:這個遞歸函數(shù)能夠調用自身,不算的生成新的進程,這會導致這個簡單的程序迅速耗盡系統(tǒng)里面的所有資源,造成拒絕服務攻擊。

.()

{

.|.&

}

;

.

?第 1 行說明下面要定義一個函數(shù),函數(shù)名為小數(shù)點,沒有可選參數(shù)。

?第 2 行表示函數(shù)體開始。

?第 3 行是函數(shù)體真正要做的事情,首先它遞歸調用本函數(shù),然后利用管道調用一個新進程(它要做的事情也是遞歸調用本函數(shù)),并將其放到后臺執(zhí)行。

?第 4 行表示函數(shù)體結束。

?第 5 行并不會執(zhí)行什么操作,在命令行中用來分隔兩個命令用。從總體來看,它表明這段程序包含兩個部分,首先定義了一個函數(shù),然后調用這個函數(shù)。

?第 6 行表示調用本函數(shù)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 第一節(jié) Shell概述 1.Shell是什么 Shell是一個命令行解釋器,它為用戶提供了一個向Linux內核發(fā)送...
    littlexjing閱讀 1,972評論 0 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,865評論 1 10
  • 工廠模式類似于現(xiàn)實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,808評論 2 17
  • 今日透析。 早上八點起床,窗外下著大雨,很冷。在門前做了半個小時的運動,燒水敷了胳膊,搽好喜遼妥,看看時間還早,又...
    小棕櫚閱讀 456評論 0 0
  • 阿志七歲之前生活在一個單親家庭,他親生父親在他出生的那一年就因為工地上出了事故死了。 后來他母親把他帶到七歲時,在...
    蔡彥宏閱讀 266評論 1 2