#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