iT邦幫忙

DAY 27
8

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

[Shell Script] Day27-提高可讀性之函式寫法(三)

  • 分享至 

  • twitterImage
  •  

關於 Bash shell script 的函式(function)介紹,今天介紹的的就是『返回值』,有呼叫函式就有可能會有返回值。可是這返回值也很特別,不是要 return 什麼,而是要使用變數去接或者直接輸出(echo)訊息。而我個人比較偏好使用 echo 來接收返回值,我的理由就是-『全域變數越少越好』啦!
關於 Bash shell script 的函式(function)介紹,今天介紹的的就是『返回值』,有呼叫函式就有可能會有返回值。可是這返回值也很特別,不是要 return 什麼,而是要使用變數去接或者直接輸出(echo)訊息。而我個人比較偏好使用 echo 來接收返回值,我的理由就是-『全域變數越少越好』啦!

Shell Script 函式有返回值的操作方式:

function_name(){
    some command
    echo “Some thing”
}

# 呼叫 function _name 並取得該函式的返回值
result=$(function_name)
echo “取得返回值為 $result”

所以要取得函式返回值就必須使用 $() 將函式包起來,就可以取得返回值了!那麼就讓我們繼續來提高程式碼的可讀性囉!

#!/bin/bash

# Perfoce 指令
P4COMMAND=/usr/local/bin/p4

# workspace variables
MyProjectLog=/home/pajace_chen/Perforce_Check/MyProjectUpdateLog.log

# Perforce workspace
export MyProjectWorkspace=MyProject

# 要登入 Perfroce 所需的環境變數
export P4CLIENT=$MyProjectWorkspace
export P4PASSWD=1234567890
export P4USER=pajace2001
export P4PORT=192.168.0.1:1666


LogCodeChanged(){
    # 將第一個參數指派給 logFile 變數
    logFile=$1
    output=$2

    # 用 echo 記錄一些相關資料
    echo "`date`: My Project 的程式碼有更動." >> $ logFile
    echo "`date`: 觸發自動建置功能" >> $ logFile
    # 將執行 p4 sync 的結果寫到 log 檔案中
    echo "$output" >> $ logFile
}

LogNoChange(){
    $output=$1
    $logfile=$2
    # 沒有程式碼更動也寫一下 log 好做偵錯時使用
    echo "`date`: MyProject 中沒有程式碼更動. Output: $output " >> $logfile
}

TriggerAutoBuildMyProject(){
	#用 wget 去開啟網頁,觸發自動建置,不是真的需要網頁的內容
	wget http://192.168.0.2:8080/jenkins/job/MyProject/build?token=TriggerBuild
    # 因為使用 wget 去抓網頁,會留下不需要的檔案,所以刪掉他
    rm build?token*
}

LogoutPerforce(){
    $P4COMMAND logout
}

LoginPerforce(){
    # 這一步驟是要登入 perforce
    echo $P4PASSWD | $P4COMMAND login >&2
}

IsCodeChanged(){
    # $1 : p4 sync 所顯示的訊息
    output=$1
	
    # 如果執行 p4 sync 的結果有包含 MyProject
    if [[ "$output" =~ //MyProject* ]]; then
        return 1;
    else
        return 0;
    fi
}

GetP4CommandSyncOutputMessage(){
    $P4COMMAND sync 2>&1
}
# ----------------------------------------------

LoginPerforce

LOG_FILE=$MyProjectLog

# 這一步驟是要將 p4 sync 的結果 assign 給OUTPUT 這個變數
OUTPUT=$(GetP4CommandSyncOutputMessage)

if [[ $(IsCodeChanged $OUTPUT) ]]
then
    LogCodeChanged $LOG_FILE $OUTPUT
    TriggerAutoBuildMyProject
else
    LogNoChange $LOG_FILE $OUTPUT
fi

LogoutPerforce

有沒有發現我這次把主要流程(71-86行)的註解全部刪除了,但是程式碼還是很清楚對不對!這樣一來就算沒有註解也是看得懂這支 shell script 是在做什麼!

正所謂讀程式的時間可是大於寫程式阿~所以就算是寫 shell script 也是要提高他的可讀性才行!除了這個原因,在最後的幾天理我還會介紹一個東西,讓寫函式變的更重要!

謝謝


上一篇
[Shell Script] Day26-提高可讀性之函示寫法(二)
下一篇
[Shell Script] Day28-太多共同的 function 怎麼辦
系列文
快快樂樂學會讓電腦幫我做事27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
老鷹(eagle)
iT邦高手 1 級 ‧ 2013-10-18 08:10:46

拍手沙發

pajace2001 iT邦研究生 1 級 ‧ 2013-10-18 10:25:24 檢舉

謝謝

我要留言

立即登入留言