iT邦幫忙

DAY 28
5

快快樂樂學會讓電腦幫我做事系列 第 25

[Shell Script] Day28-太多共同的 function 怎麼辦

  • 分享至 

  • xImage
  •  

在寫 Shell Script 也是可以像寫程式一樣,引入其他的 shell script。
如果我們常常寫一些各式各樣的 Bash Shell Script 來協助我們日常重複的工作時,不難發現其實會有很多重複的函式。例如:寫 log 的格式。這應該在很多 Shell Script 中都會用到,所以都會重複。

在前幾篇我介紹了一些使用函式提高程式碼的方式,我先以寫 log 的格式來舉例子好了。

我在 A Script 和 B Script中都會用到寫 log 這個函式,所以這兩個 Script 中都會有一個函式叫做 LogToFile() (假設這個函式的名稱叫做 LogToFile())。這樣會造成什麼樣的問題呢?其實也還好啦,平常問題是不大,只不過如果有一天你想更改寫 log 的格式時,你就必須將這兩個 Script 翻出來,然後一一修改。如果今天是十個呢?那就要一一找出來,總共要改十次。

OK!格式漏改也沒什麼了不起的。但如果今天這個函式叫做『取得某SDK的路徑』呢?那很抱歉,漏改一個我們SDK路徑錯誤就可能會導致程式碼編譯錯誤,或者是編譯出來的根本就是錯誤的版本。

有感覺了嗎?這其實就跟我們在 script 中使用到的變數一樣。同樣的東西只要有一個就好,其他的就用變數來代替。如此一來如果說要修改什麼,你只要修改一個地方就完成了所有工作了。不用在擔心是否有哪裡漏掉,哪裡忘了改。

那該怎麼做呢?

在 Bash Shell Script 中也是可以 引入 其他的 Bash Shell Script 的。其語法如下:

source someScript.sh

只要在要 引入 的 script 前面加上 source 就可以了。如果有不同的路徑,也要將該相對或絕對路徑加上。

與前面相同的是,必須要在用到要該 引入 的 script 之前就把該 script 給 引入 進來,否則會造成找不到的現象喔!!

那我就來個非常非常簡單的範例吧,這個範例主要就是要介紹怎麼使用 source 這個關鍵字來 引入 其他的 script.

這個非常簡單的範例就是,我有一個函式是負責計算圓的面積,因為考慮到很多 script 都會用到,所以我將這個函式拉到另一個 script 中,並且放到 Common 資料夾下,讓其他要用到的 script 去用 source 把他引用進來。

Common 資料夾下的 math.sh

#!/bin/bash

CalCricleArea(){
    radius=$1
    pi=3.1415

    circleArea=$(echo "scale=2;$pi * ($radius * $radius)" | bc)
    echo $circleArea
}

math.sh 中,目前就只有一個函式 CalCircleArea (計算圓的面積)。

那我們的主成是就是要把 Common/math.sh 這個 script 給引入,範例如下:

#!/bin/bash

source Common/math.sh

result=$(CalCricleArea 5)

echo " 半徑為 5 的原面積 = $result"

主要的部分就是第三行 source Common/math.sh ,這樣不同的script都可以引用同一個函式了。所以我們實際上執行的結果如下:


上一篇
[Shell Script] Day27-提高可讀性之函式寫法(三)
下一篇
[Shell Script] Day29-Shell Script 也可以寫測試
系列文
快快樂樂學會讓電腦幫我做事27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言