繼續昨天的範例,利用函式帶入參數讓我們的 shell script 可讀性繼續的提高。
因為,看 code 的時間總是大於寫 code 的時間啊!!!
在繼續之前,我們需要在介紹一個關於函示(function)的相關語法,那就是『帶參數』。
Shell Script 的函示參數使用方式與一般的程式語言不太一樣。還記得我們再第15天有介紹 shell script 的參數使用方式嗎?那裡介紹的是指令帶參數,而我們使用函示的參數就跟指令帶參數非常類似!你就想成呼叫函示(call function) 就跟執行指令一樣,這樣自然就知道怎麼使用了!
Shell script 函示使用參數的方式如下:
function_name(){
#顯示參數一
echo “$1”
#顯示參數二
echo “$2”
}
…
…
# 呼叫 function _name
function_name 參數一 參數二
一樣夠簡單了吧!!
那麼就讓我們繼續來提高程式碼的可讀性囉!
#!/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
}
# ----------------------------------------------
# 這行如果解釋就太雞肋了
LoginPerforce
# 這一步驟是要將 p4 sync 的結果 assign 給OUTPUT 這個變數
OUTPUT=$($P4COMMAND sync 2>&1)
# 指定 log file 檔案名稱
LOG_FILE=$MyProjectLog
# 如果執行 p4 sync 的結果有包含 MyProject 就去觸發自動建置功能
if [[ "$OUTPUT" =~ //MyProject* ]]
then
# 呼叫 LogCodeChanged 函示並帶入參數 $LOG_FILE 和 $OUTPUT
LogCodeChanged $LOG_FILE $OUTPUT
# 這行應該不用註解吧 ^_^”
TriggerAutoBuildMyProject
else
# 看名字就知道這行在幹嘛了! ^_^
LogNoChange $LOG_FILE $OUTPUT
Fi
LogoutPerforce
今天又多做了一些小變化,整個主要的流程式(56-78行)是不是變得跟看文章一樣輕鬆呢?
明天我會在介紹如何讓接收函示返回的值,讓這個範例更加簡單變得跟小程式一樣(謎之音:這本來就是一支小程式阿 )
鐵人賽文章分享
上一篇 提高可讀性之函示寫法(一)