Shell 脚本 - 自动拉取GIT代码+编译3518EV200固件代码

4 篇文章 0 订阅
1 篇文章 0 订阅

一、前言

公司的固件开发人员经常用本机的代码编译打包文件,然后把编译好的固件发给硬件测试人员,经常出现开发人员不及时提交代码的问题。为了加强代码管控和规范化管理,最近搭了一个给硬件测试人员使用的服务器, 写了一个脚本文件用于自动拉取GIT上的固件代码,然后自动编译并打包。

二、以前的代码

由于是做物联网项目,公司的流量卡有分定向流量卡和普通流量卡,定向流量卡只能访问一个固定的内网地址,普通流量卡就类似我们手机中的普通上网卡,什么网站都可以访问。

以前编译打包文件时,开发人员通过修改代码中的__VPN_SIM__和FirmVer这2个参数来控制编译出的固件是什么版本号和区分流量卡的,部分代码如下:

//版本号定义
#ifdef __VPN_SIM__
	#define   FirmVer                  "V005"
#else
	#define   FirmVer                  "P028"
#endif

//服务器URL定义
#ifdef __VPN_SIM__
  #define HOMEPAGE        "http://192.168.0.125:80"
#else
  #define HOMEPAGE        "http://www.xxx.cn:80"  //正式服务器
  //#define HOMEPAGE        "http://test.xxx.cn:8080/"  //测试服务器
#endif

三、改造的过程

3.1 改造的思路

执行脚本的指令

./buildFireware.sh P001

或者

./buildFireware.sh V001

脚本的输入参数就1个:

  • 参数1 -- 固件的版本号 

在buildFireware.sh脚本中调用make命令执行Makefile中的编译指令时,直接传入固件版本号来代替代码中的FirmVer,同时在shell脚本中通过<版本号>的第一个字符是V还是P自动控制HOMEPAGE,不需要开发和测试人员更改代码就可以灵活输出不同的固件版本。

3.2 改造的C语言代码

只是加多了一个#ifndef FirmVer和#endif

//版本号定义
#ifndef FirmVer
	#ifdef __VPN_SIM__
		#define   FirmVer                  "V005"
	#else
		#define   FirmVer                  "P028"
	#endif
#endif

//服务器URL定义
#ifdef __VPN_SIM__
  #define HOMEPAGE        "http://192.168.0.125:80"
#else
  #define HOMEPAGE        "http://www.xxx.cn:80"  //正式服务器
  //#define HOMEPAGE        "http://test.xxx.cn:8080/"  //测试服务器
#endif

3.3 改造的Makefile

只是在CFLAGS中加多 $(ZYT_VER),ZYT_VER通过shell脚本传入给该Makefile

3.4 buildFireware.sh的内容

BuildVersion=$1
BuildItem=$2
BuildTime=$(date '+%Y%m%d%H%M%S')
DIR_OUTPUT=/zyt/liteos-HI3518ESV200-$BuildVersion-$BuildTime
DIR_FIREWARE_CODE=/arm/ParkerEtc/jv_code_sdk_park
DIR_FILESYSTEM=/arm/liteos_hi3518EV200_park
VersionType=${BuildVersion: 0: 1}
VersionLen=${#BuildVersion}

if [ -z "$BuildVersion" ]; then
  echo -e "\033[41;33m Please enter the version number you want to compile \033[0m"
  exit
fi
 
function CheckDir()
{
	[ -d $1 ] || mkdir -p $1
}

function gitGitFile()
{
	CodeDir="/arm"
	
	if [ -d "${CodeDir}" ]; then
		cd $CodeDir
		git pull
	else
		git clone --progress -v "http://<Git用户名>:<Git密码>@<GitLib网址>/Michael/Parker_ETC.git" $CodeDir
	fi
}

echo -e "\033[42;37m VersionType = [$BuildVersion,$VersionType,${#BuildVersion}] \033[0m"

if [ $VersionLen -lt 4 ]; then
  echo -e "\033[41;33m The version number must be longer than 4 bits \033[0m"
  exit
fi

if [ "P" == "$VersionType" ] ; then
	gitGitFile
	cd $DIR_FIREWARE_CODE
	CheckDir $DIR_FIREWARE_CODE/bin
	make clean
	make ZYT_VER=-DFirmVer=\\\"$BuildVersion\\\"
	echo -e "\033[42;37m fireware is finished  \033[0m"
	
	cd $DIR_FILESYSTEM
	CheckDir $DIR_FILESYSTEM/fs_park/config
	CheckDir $DIR_OUTPUT
	
	./mk-update.sh	${DIR_OUTPUT} DQPPARK $DIR_FIREWARE_CODE/dqp_main fs_park boot_emmc
	echo -e "\033[42;37m $BuildVersion is finished, files in $DIR_OUTPUT \033[0m"
elif [ "V" == "$VersionType" ] ; then
	gitGitFile
	cd $DIR_FIREWARE_CODE
	CheckDir $DIR_FIREWARE_CODE/bin
	make clean
	make ZYT_VER="-DFirmVer=\\\"$BuildVersion\\\" -D__VPN_SIM__"
	echo -e "\033[42;37m fireware is finished  \033[0m"
	
	cd $DIR_FILESYSTEM
	CheckDir $DIR_FILESYSTEM/fs_park/config
	CheckDir $DIR_OUTPUT
	./mk-update.sh	${DIR_OUTPUT} DQPPARK $DIR_FIREWARE_CODE/dqp_main fs_park boot_emmc
	echo -e "\033[42;37m $BuildVersion is finished, files in $DIR_OUTPUT \033[0m"
else
	echo -e "\033[41;33m Please enter the version number begun with P or V \033[0m"
fi

3.5 设置指令的别名

在~/.bashrc中加入一条alias命令,然后就可以执行mk P001了,该命令可以将一些较长的命令进行简化 。bashrc是环境变量的配置文件,/etc/bashrc和~/.bashrc区别就在于一个是全系统的设置一个是当前用户的设置,在shell中执行alias命令会显示所有的别名。

alias mk='/anron/buildFireware.sh'

 四、部分语法

4.1 Makefile中

4.1.1 引入外部文件

# 在Makefile中引入外部文件
include liteos_config.mk

4.1.2  宏定义 -D

-Dmacro=\"string\",等同于在头文件中定义:#define macro "string"
-Dmacro,等同于在头文件中定义:#define macro 1

4.2 Shell中 

4.2.1 函数的调用

# 以下是test.sh文件,函数中$1的值是局部变量,与shell文件的$1不同值
function CheckDir()
{
	echo "[$1][$2]"
}


echo "[$1]"
CheckDir
CheckDir "b" "c"
CheckDir "b" $1

# 调用test.sh后的输出结果
[root@mac /]# ./test.sh a
[a]
[][]
[b][c]
[b][a]
# 给make传递参数,\是转义符
make ZYT_VER=-DFirmVer=\\\"$BuildVersion\\\"
make ZYT_VER="-DFirmVer=\\\"$BuildVersion\\\" -D__VPN_SIM__"

4.2.2 字符串的截取

# 字符串的截取
VersionType=${BuildVersion: 0: 1}

${string: start :length}	从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
${string: start}	从 string 字符串的左边第 start 个字符开始截取,直到最后。
${string: 0-start :length}	从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
${string: 0-start}	从 string 字符串的右边第 start 个字符开始截取,直到最后。
${string#*chars}	从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string##*chars}	从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string%*chars}	从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
${string%%*chars}	从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符

4.2.3 字符串的长度

# 返回字符串的长度 ${#变量名}
varLen=${#BuildVersion}

五、运行前的准备

脚本运行前要先安装交叉编译环境

# 安装依赖库
yum install -y glibc.i686 libstdc++.so.6 zlib.i686

# 安装交叉编译工具
tar xzvf arm-hisiv500-linux.tgz
arm-hisiv500-linux/arm-hisiv500-linux.install

# 增加export
export PATH=/opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/bin:$PATH 

# 测试安装结果
arm-hisiv500-linux-gcc -v

Shell 脚本 - 自动拉取GIT代码+编译前后端代码+发布

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下命令在shell脚本拉取git代码: ``` #!/bin/bash git clone https://github.com/username/repo.git ``` 其,`username`是你的GitHub用户名,`repo`是你要拉取的仓库名称。你也可以使用SSH协议来拉取代码,只需要将`https`替换为`git`即可。 如果你需要在脚本指定代码的存储路径,可以在`git clone`命令后面加上路径: ``` #!/bin/bash git clone https://github.com/username/repo.git /path/to/destination ``` 其,`/path/to/destination`是你要存储代码的路径。如果该路径不存在,Git自动创建它。 ### 回答2: Shell脚本Linux操作系统常用的一种脚本语言,能够执行一系列的操作任务。其之一就是拉取Git代码的任务。在执行该任务之前,我们需要明确一些基本概念: 1. Git是一个分布式版本控制系统,用于管理代码库的版本和代码的协同开发。 2. 拉取(pull)代码是指将服务器上的代码库更新到本地。 下面我们将介绍如何用Shell脚本拉取Git代码: 1. 确认Git环境和权限 在执行拉取代码脚本命令之前,需要确认Git环境已经正确安装并配置,并且拥有权限访问Git仓库。 2. 创建Shell脚本 打开终端,输入`vi pull_git.sh`,创建一个名为`pull_git.sh`的Shell脚本文件。 3. 开始脚本编写 在`pull_git.sh`文件,输入以下Shell脚本命令: ``` #!/bin/sh git config --global credential.helper store git reset --hard git clean -xfd git pull ``` 4. 解释脚本命令 a. `#!/bin/sh` 表示使用Shell作为解释器。 b. `git config --global credential.helper store`表示将Git登录凭证保存在本地。 c. `git reset --hard`表示强制将本地仓库回滚到和远程仓库一致的状态。 d. `git clean -xfd`表示清除本地仓库没有被Git版本控制的文件和目录。 e. `git pull`表示拉取最新的代码。 5. 保存文件 按“Esc”键退出编辑状态,输入“:wq”,保存并退出。 6. 对脚本添加执行权限 在终端上使用chmod命令为脚本添加执行权限: ``` chmod +x pull_git.sh ``` 7. 执行脚本 在终端输入`./pull_git.sh`,执行脚本,便能将服务器上的代码更新到本地了。 Shell脚本可以帮助我们快速方便地拉取Git代码,使得我们能够更加高效地进行协同开发。反复的输入命令不但浪费时间,也容易出现错误,因此使用Shell脚本无疑是一个不错的选择。 ### 回答3: 首先,我们需要了解什么是shell脚本git代码Shell脚本是一种文本文件,它包含了一系列可执行的命令。Git是一种开源的分布式版本控制系统,它能够管理您的代码。 在编写shell脚本拉取git代码之前,我们需要确保我们已经安装了Git。另外,我们需要确定我们要拉取Git代码存储在哪个Git。通常情况下,我们需要提供Git库的URL和分支或标签名。 下面是一个简单的Shell脚本示例,可以拉取Git代码: ```shell #!/bin/bash # Git的URL和分支或标签名 git_url="https://github.com/user/repo.git" branch_or_tag="main" # 克隆代码到本地 git clone $git_url # 切换到指定分支或标签 cd repo && git checkout $branch_or_tag ``` 上面的脚本首先定义了Git的URL和分支或标签名,并使用`git clone`命令将代码克隆到本地。接下来,使用`cd`命令进入git仓库目录,并使用`git checkout`命令切换到指定的分支或标签。如果没有指定分支或标签,则默认为`master`分支。 当我们将上面的脚本保存为`pull_git.sh`文件并运行时,它将拉取指定的Git仓库并切换到指定的分支或标签。 此外,我们还可以在脚本添加其他操作,例如检查是否已经在本地存在该Git仓库,以及在代码拉取完成后进行编译和部署等操作。 总之,使用Shell脚本拉取Git代码是一项非常常见的任务,可以大大提高我们的效率。我们只需要在脚本定义好Git的URL和分支或标签名,然后就能够轻松地拉取代码并进行其他操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值