一起养成写作习惯!这是我参与「掘金日新计划 · 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方法。由于该方法不需要参数,因此我们调用时不需要进行参数的处理,直接调用函数名即可,且无需括号。此后,我们开始实际的打包工作。首先对于包含服务的数组进行了遍历,使用@获取数组的全部内容并利用#计算出数组的长度。在数组的循环遍历中,首先进入到目标路径中,由于此处与上述内容重复,故不进行详细解释。不同之处在于需要传递路径的地址,也就是函数调用时直接将参数以空格分隔传递即可。而地址的获取则涉及到了数组中元素的获取,直接采用符号进行选取。至此,脚本的主体部分解释完毕。最后看一下脚本启动阶段,我们需要使用$+数字进行参数的判断,同时利用-n和=等符号,作为条件语句的结构。需要注意的是,shell脚本中的条件语句需要闭合操作,语法有所不同。
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。