我的版本釋出控制指令碼
#author: hjjdebug
#date: 2018年 11月 29日
#我的版本釋出控制指令碼, 用到了bash 及 awk
#功能:
#第1,獲取釋出版本主版本號,次版本號,對應的svn版本號及打包的檔名稱
# 可以檢查實際的svn號與釋出的期望svn號是否一致
# 若版本不一致,給出提示資訊,退出, 可防止人為錯誤
#第2, 利用here文件,生成zero.txt, ma.conf 檔案
#第3, 自動更新version.txt
#第4, 打包檔案
#第5,拷貝目標檔案到U盤, 若未插U盤,給出紅色警告提示.
#第6,copy 成功後,umount U盤,並給出成功提示資訊,錯誤用紅色字提示原因
#使用:
#請先編輯releaseV.txt, 只使用它的最後一行
#知識:
# 用awk 分解列,提供給shell變數使用.
# 用read 從程序中讀,可一次獲取多個變數
# src 是重新格式化後的打包源字串
#!/bin/bash
# here doc
function CreateZeroTxt()
{
cat <<-EOF > zero.txt
0,0,0,769,
EOF
}function CreateMaConf()
{
cat <<-EOF > ma.conf
#automatically created, DO NOT EDIT!
#language english chinese
language: chinese#lcd resolution 1024_768, 800_480
resolution: 800_480#通訊口,該行要求不能有空格
devCom:/dev/ttymxc2#printer port
devPrinter: /dev/ttymxc1#the drive process name
driveProcess: ./modbusmaster# whether use startup login window ? 0->no, 1->yes ,2->other
startupLogin: 1serverAddr:192.168.1.136
# watchdog timeout (s) my(7), sys(30)
watchdogTime: 30# 網路客戶端更新時間3s
netTime: 3# admin timeout (s), my (2分鐘->120s), sys(30min -> 1800s)
adminTime: 1800#檢查電源的次數 my(1), sys(30)
#由於機制不同, 800_480 1為1秒, 1024_768 1相當於2-3秒
powerCheckTimes: 30
EOF
}
function getRealSvn()
{
cd "../src/"
svn info |grep -i "revision" |cut -d ' ' -f2
}#svn 號, 主版本號, 次版本號.build號 壓縮的檔案,用空格分開
#815 6 1.11 monitorAll modbusmaster image/* zhpy_table.db zero.txt ma.conf version.txt src.qm mount.sh
# 用awk 格式化輸出
function getLastLine()
{
tail -n 1 releaseV.txt |awk '{printf("%s %s %s ",$1,$2,$3);\
for(i=4;i<=NF;i++)\
{\
printf("%s ",$i);\
}\
printf("\n");\
}'
}
# 執行一個命令或者函式,將輸出結果付給變數,帶()是把列表付給陣列變數
realSvn=`getRealSvn`
echo realSvn=$realSvn# src 將把多餘的列輸出都收集起來
# 第一個<號是重定向,第二個<號是從程序輸出讀取
read svn major minor_build src < <(getLastLine)
echo svn=$svn
echo major=$major
if [ $svn -ne $realSvn ]
then
echo "expected svn:"$svn, "real svn:"$realSvn
exit 1
fi
# 第一個<號是重定向,第二個<號是從程序輸出讀取
read minor build < <(echo $minor_build |awk -F"." '{print $1,$2}');
minor=`printf "%03d" $minor`
echo minor=$minorif [ -z $build ]
then
DST=TW_AllInOne_monitor_all.zip_V${major}.${minor}
else
DST=TW_AllInOne_monitor_all.zip_V${major}.${minor}.${build}
echo build=$build
fi# 更新version.txt, $DST 存入version.txt
echo "DST="${DST}
echo ${DST} > version.txt# 使用原始的zero.txt, ma.conf打包
# 原始zero.txt 配置為0個模組
# 原始ma.conf 配置為使用登入視窗
cp -v zero.txt zero.txt.bak
cp -v ma.conf ma.conf.bak
# 建立zero.txt, ma.conf 檔案
CreateZeroTxt
CreateMaConf
# 剔除符號表並壓縮檔案
arm-linux-gnueabihf-strip monitorAll
arm-linux-gnueabihf-strip modbusmaster
echo "zip -r $DST $src"
zip -r $DST $src# 恢復zero.txt, ma.conf
cp -v zero.txt.bak zero.txt
cp -v ma.conf.bak ma.conf# 向U盤copy
result=`cp $DST /media/hjj/UDISK 2>&1`
if [ $? -eq 0 ]
then
umount /media/hjj/UDISK
echo "copy & umount ok!"
else
echo -e "\033[31m $result \033[0m"
fi