4月更文d13n13-通过一个打包脚本解析部分常用shell命令

111 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情

通过一个打包脚本解析部分常用shell命令

前文

本文内容为在工作中遇到需要进行若干个项目打包的情况,为了简化操作采用自动化脚本进行打包。通过该脚本对于相关的shell脚本命令进行一些总结。

脚本内容

#! /bin/bash
baseDir="/git/iiot/"
jarDir="iiot-jar"
baseBranch="develop"
targetBranch="show"
targetTag="show_v20220414"
serverArray=("service)
jarArray=("service.jar")

function enterPath(){
	# 先进入目标路径
	path=${serverArray[i]}
	echo $baseDir$path
	cd $baseDir$path
	echo $(pwd)
}

function merge() {
	for (( i = 0; i < ${#serverArray[@]}; i++ )); do
		# git
	done
}

function packageMove() {
	echo "package move"
	cp target/$1 $baseDir$jarDir
}

function package() {
	echo "package"
	for (( i = 0; i < ${#serverArray[@]}; i++ )); do
		enterPath ${serverArray[i]}
		mvn clean
		mvn package -P $targetBranch
		sleep 1
		packageMove ${jarArray[i]}
	done
}
if [ ! -n "$1" ];then
	echo "usage:sh iiot-package.sh package/merge/mergeandpackage"
elif [ "$1" = "merge" ];then
	merge
elif [ "$1" = "package" ];then
	package
elif [ "$1" = "mergeandpackage" ];then
	merge
	package
else
	echo "usage:sh iiot-package.sh package/merge/mergeandpackage"
fi

脚本相关用法解释

首先这是一个多服务打包的脚本,我们的需求是首先根据若干服务的地址,先从开发分支拉取全部代码到本地,再将开发分支的代码合并到打包分支当中。在打包分支中进行代码的打包,打包后将代码包移动到目标的文件夹之中,并对项目进行tag记录处理。关于git操作的命令在上述的脚本中进行了省略,主要内容是拉取代码、分支切换、分支合并、增加标记等内容。

下面来看实际的脚本处理思路。首先我们利用数组存储了各服务在硬盘当中的路径,以及各服务打包结果的包名,将其存储到数组中,利用小括号及空格,便可实现脚本之中的数组。代码处理过程省略,直接从打包过程开始看。首先进行了脚本中的函数调用,调用了package方法。由于该方法不需要参数,因此我们调用时不需要进行参数的处理,直接调用函数名即可,且无需括号。此后,我们开始实际的打包工作。首先对于包含服务的数组进行了遍历,使用@获取数组的全部内容并利用#计算出数组的长度。在数组的循环遍历中,首先进入到目标路径中,由于此处与上述内容重复,故不进行详细解释。不同之处在于需要传递路径的地址,也就是函数调用时直接将参数以空格分隔传递即可。而地址的获取则涉及到了数组中元素的获取,直接采用serverArray[i]即可获取数组中的第i个元素。此后进行实际的打包处理。打包过程中涉及到一个脚本变量的选取。脚本中变量的生命时直接用等号连接即可,注意两端不需要空格,而调用时则需要使用{serverArray[i]}即可获取数组中的第i个元素。此后进行实际的打包处理。打包过程中涉及到一个脚本变量的选取。脚本中变量的生命时直接用等号连接即可,注意两端不需要空格,而调用时则需要使用符号进行选取。至此,脚本的主体部分解释完毕。最后看一下脚本启动阶段,我们需要使用$+数字进行参数的判断,同时利用-n和=等符号,作为条件语句的结构。需要注意的是,shell脚本中的条件语句需要闭合操作,语法有所不同。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。