溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

shell函數(shù)介紹及使用

發(fā)布時間:2020-06-21 03:41:20 來源:網(wǎng)絡 閱讀:450 作者:warrent 欄目:系統(tǒng)運維

注:以下內(nèi)容借鑒于老男孩出版的shell編程實戰(zhàn)這個文檔編寫的。


一、什么是函數(shù)?

在shell腳本中,函數(shù)類似Linux系統(tǒng)中的命令別名,可以簡化程序的代碼量,讓程序
更易讀、易改、易用。

簡單地說,函數(shù)的作用就是將程序里多次被調(diào)用的相同代碼組合起來(函數(shù)體),并為其取一個名字(即函數(shù)名),其他所有想重復調(diào)用這部分代碼的地方都只需要調(diào)用這個名字就可以了。當需要修改這部分重復代碼時,只需要改變函數(shù)體內(nèi)的一份代碼即可實現(xiàn)對所有調(diào)用的修改,也可以把函數(shù)獨立地寫到文件里,當需要調(diào)用函數(shù)時,再加載進來使用。

使用shell函數(shù)的優(yōu)勢如下:

  • 把相同的程序段定義成函數(shù),可以減少整個程序的代碼量,提升開發(fā)效率;
  • 增加程序的可讀性、易讀性,提升管理效率;
  • 可以實現(xiàn)程序功能模塊化,使得程序具備通用性(可移植性)。

二、shell函數(shù)的語法

(1)標準寫法如下:

function 函數(shù)名() {       #推薦使用此格式,花括號里面寫入的就是要執(zhí)行的命令
    return n
}

(2)簡化寫法如下:

函數(shù)名() {                     #不用function的方法
    指令...
    return n
}

在shell函數(shù)的語法中,function表示聲明一個函數(shù),這部分可以省略不寫。

三、shell函數(shù)的執(zhí)行

shell的函數(shù)分為最基本的函數(shù)和可以傳參的函數(shù)兩種,其執(zhí)行方式分別如下:

(1)執(zhí)行不帶參數(shù)的函數(shù)時,直接輸入函數(shù)名即可(注意不帶小括號),格式如下:

函數(shù)名

有關執(zhí)行函數(shù)的重要說明:

  • 執(zhí)行shell函數(shù)時,函數(shù)名前的function和函數(shù)后的小括號都不要帶;
  • 函數(shù)的定義必須在要執(zhí)行的程序前面定義或加載;
  • shell執(zhí)行系統(tǒng)中各種程序的執(zhí)行順序為:系統(tǒng)別名→函數(shù)→系統(tǒng)命令→可執(zhí)行命令;
  • 函數(shù)執(zhí)行時,會和調(diào)用它的腳本共用變量,也可以為函數(shù)設定局部變量及特殊位置參數(shù);
  • 在shell函數(shù)里面,return命令的功能和exit類似,return的作用是退出函數(shù),而exit是退出腳本;
  • return語句會返回一個退出值(即返回值)給調(diào)用函數(shù)的當前程序,而exit會返回一個退出值(即返回值)給執(zhí)行程序的當前shell;
  • 如果將函數(shù)存放在獨立的文件中,被腳本加載使用時,需要使用source或“.”來加載。
  • 在函數(shù)內(nèi)一般使用local定義局部變量,這些變量離開函數(shù)后就會消失。

(2)帶參數(shù)的函數(shù)執(zhí)行方法,格式如下:

函數(shù)名 參數(shù)1 參數(shù)2

函數(shù)后面接參數(shù)的說明:

  • shell的位置參數(shù)($1、$2...、$#、$?及$@)都可以作為函數(shù)的參數(shù)來使用;
  • 此時父腳本的參數(shù)臨時地被函數(shù)參數(shù)所掩蓋或隱藏;
  • $0比較特殊,它仍然是父腳本的名稱;
  • 當函數(shù)執(zhí)行完成時,原來的命令行腳本的參數(shù)即可恢復;
  • 函數(shù)的參數(shù)變量是在函數(shù)體里面定義的。

四、shell函數(shù)的基礎使用舉例

(1)示例1:

[root@localhost ~]# vim a.sh
#!/bin/bash
#以下是定義a和b兩個函數(shù)
function a(){
        echo "aaaaaaaaaaa"
}
function b(){
        echo "bbbbbbbbbbb"
}
b      #在腳本中執(zhí)行函數(shù)名以便調(diào)用函數(shù),這里先調(diào)用了函數(shù)b
a       #再調(diào)用函數(shù)a

[root@localhost ~]#  sh a.sh     #執(zhí)行結果如下
bbbbbbbbbbb
aaaaaaaaaaa

老男孩編寫的關于shell函數(shù)的內(nèi)容,只有兩個大的腳本沒有寫上來了,建議看原版文檔來了解shell,后面的內(nèi)容,我沒什么耐心寫了,可以在我博客置頂文章的末尾,下載原版文檔進行學習。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI