簡談shell函式和迴圈巢狀

如同其他程式語言一樣,shell也是有函式的語法的。那麼,shell的函式語法是什麼樣的呢?

函式就是對某一功能或一些功能進行程式碼封裝,從而實現模組化管理,各種程式語言道理如出一轍。在shell中呼叫函式的時候,我們可以直接使用函式名。可能不像python那樣,如果簡單的定義一個無傳參函式,呼叫的時候都是function()的形式,在shell中就簡單的寫成function即可。當然,有傳參的時候那是需要帶上引數的。

shell函式兩種語法結構

1、

函式名()

{

命令集

}

2、

function 函式名()

{

命令集

}

需要強調的一點是,在對函式進行呼叫時,不需要帶括號()。

函式呼叫語法

函式名 引數1 引數2。。。,函式中使用$1,$2的引用來傳遞引數。

shell函式中的變數為全域性變數,沒有區域性變數。

簡談shell函式和迴圈巢狀

如上圖所示的change函式實現了a變數的重新賦值。

函式引數傳遞的演示

簡談shell函式和迴圈巢狀

同時在shell函式中或者普通的shell指令碼中,我們不僅會使用簡單的if-while等簡單的迴圈,我們更多的時候用到的都是迴圈的巢狀。所以,我們也有必須要對shell中迴圈的巢狀有一個瞭解和認識。

下面我們就來談一談迴圈巢狀,以九九乘法表為例引入。

簡談shell函式和迴圈巢狀

簡談shell函式和迴圈巢狀

迴圈巢狀,顧名思義就是迴圈裡面巢狀迴圈。

對於迴圈的巢狀,我們其實知道指令碼是如何執行,就很容易理解迴圈嵌套了。迴圈巢狀是從裡往外執行,從外往裡編寫。也就是說在執行的時候,最先真正開始執行的是內層迴圈,然後才是外層迴圈。

巢狀的指導思想就是:外層迴圈控制行,內層迴圈控制列。牢記這一點,就可以比較輕鬆點掌握雙層迴圈巢狀。至於更多維度的巢狀,原理也是大同小異,那時候我們可能要考慮空間複雜度和時間複雜度的問題,然後進行函式的設計。