我的版本发布控制脚本

#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: 1

    serverAddr: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=$minor

if [ -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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值