iT邦幫忙

DAY 26
8

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

[Shell Script] Day26-提高可讀性之函示寫法(二)

  • 分享至 

  • twitterImage
  •  

繼續昨天的範例,利用函式帶入參數讓我們的 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行)是不是變得跟看文章一樣輕鬆呢?
明天我會在介紹如何讓接收函示返回的值,讓這個範例更加簡單變得跟小程式一樣(謎之音:這本來就是一支小程式阿 XD

鐵人賽文章分享
上一篇 提高可讀性之函示寫法(一)


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

1 則留言

0
鐵殼心
iT邦高手 1 級 ‧ 2013-10-17 10:26:19

沙發
拍手

pajace2001 iT邦研究生 1 級 ‧ 2013-10-17 12:08:32 檢舉

謝謝

我要留言

立即登入留言