天天看點

shell腳本定期生成phpdoc

在linux中使用shell腳本定時操作,svn up源代碼至最新,同時生成phpdoc文檔,本例将完成一個執行個體:

1. 建立一個目錄用來存放sh腳本檔案(以及用到的log日志):/opt/ci123/www/html/shell/scm/bbs2014

shell腳本定期生成phpdoc

其中的檔案說明:

function.sh:包含腳本使用到的一些function;

config.sh:包含腳本中操作的一些環境配置,例如svn賬号密碼路徑、phpdoc存放路徑、源代碼路徑等等;

global.sh:包含對所有引用的包含;

svn.sh:主main執行腳本,包含操作流程;

svn.log:本例中對每次sh執行操作的log日志記錄檔案(可由sh腳本生成,名字可自定義);

svn_tmp.log:本例中存儲最近一次的sh執行操作的log日記記錄檔案(可由sh腳本生成,名字可自定義);

2. sh腳本代碼:

function.sh:

#!/bin/sh
addLog()
{
        # $1:内容
        # $2:日志路徑
        echo -e $1 >> $2;
}
setLog()
{
        # $1:内容
        # $2:日志路徑
        echo -e $1 > $2;
}
getSvnVersion()
{
        # $1:svn本地工作區
        # $2:svn使用者名
        # $3:svn密碼
        # grep查找過濾 | cut分割 以“:”取第二塊 | tr去除 空格
        echo `svn info --username=$2 --password=$3 $1 | grep "Revision" | cut -d ":" -f 2 | tr -d " "`; #svn本次版本
}
updateSvn()
{
        # $1:svn本地工作區
        # $2:svn使用者名
        # $3:svn密碼
        echo `svn up --username=$2 --password=$3 $1 | grep "revision"`;
}
setPhpdoc()
{
        # $1:本地源代碼路徑
        # $2:phpdoc文檔生成路徑
        echo `phpdoc -d "$1" -t "$2" -ti "$1" -o "HTML:frames:default" | grep "Total Documentation Time"`;
}
getValByKey()
{
        # $1:檔案路徑
        # $2:要搜尋的鍵值 key:val
        test -f "$1" && tmp=`cat $1 | grep "$2" | cut -d ":" -f 2 | tr -d ""` || tmp="";
        echo $tmp;
}
           

config.sh:

#!/bin/sh
# svn相關設定
g_svn_path="http://svnadmin.xxx";
g_svn_user="name";
g_svn_pwd="pwd";
# 工作目錄
g_path="/opt/ci123/www/html/bbs2014";
g_path_work="$g_path/bbs2014"; #源代碼根目錄
g_path_phpdoc="/opt/ci123/www/html/phpdoc/bbs2014/"; #phpdoc生成文檔存放目錄
# 臨時目錄
g_log=`pwd`"/svn.log"; #運作日志
g_log_tmp=`pwd`"/svn_tmp.log";
           

global.sh:

#!/bin/sh
source config.sh
source function.sh
           

svn.sh:

source global.sh

now=`date '+%F %T'`;
log="log:$now""\n"; #記錄下執行時間

`updateSvn $g_path_work $g_svn_user $g_svn_pwd`;
svn_version_now=`getSvnVersion $g_path_work $g_svn_user $g_svn_pwd`;
log="$log""svn:$svn_version_now""\n"; #記錄下執行時的svn版本号

svn_version_tmp=`getValByKey "$g_log_tmp" "svn"`
if [ ! $svn_version_tmp ]; then
        svn_version_tmp=0;
fi

if [ "$svn_version_now" -gt "$svn_version_tmp" ]; then
        #需要更新phpdoc
        log="$log"`setPhpdoc $g_path_work $g_path_phpdoc`"\n";
fi

`setLog "$log" "$g_log_tmp"`;
`addLog "$log" "$g_log"`;

           

3. 添加crontab定時執行:

## @xwl 2014-07-21 /bbs2014/svn.sh
0 10 * * * (cd /opt/ci123/www/html/shell/scm/bbs2014 ; sh svn.sh)
           

4. sh執行記錄:

執行過後,檢視svn_tmp.log(最近一次日志記錄):

log:2014-07-31 10:00:01
svn:1305
           

svn.log(包含所有日志記錄):

log:2014-07-22 10:47:05
svn:1305
Total Documentation Time: 5 seconds

log:2014-07-22 10:47:25
svn:1305

....
           

其中包含的資訊有:sh執行時間,執行時源代碼svn版本号,phpdoc文檔是否生成。