shell脚本实现在linux上批量替换jar包中的class文件并自动重启应用

 #!/bin/sh  

#参数1 是自定义的环境类型 dev test prod
#应用所在根目录路径 xxx替换为自己应用文件夹名
appHome=/data/apps/webapps/xxx-$1
#应用实际路径xxx替换为自己的应用名
appJar=$appHome/xxx.jar  

isLegal="false"
#校验输入的环境参数是否合法
for loop in "dev" "test" "prod"

do
 
	if [[ $1 =~ $loop ]];

	then 
		isLegal="true"
		echo "you are choosing $loop environment"
	fi
done   

if [[ $isLegal = "false" ]];
	then
		echo "param is wrong! avaliable are  dev,test,prod" 
	exit
fi


#filesTobeUpdated 指的是要替换的文件上传路径 

filesTobeUpdated=/home/$1/classes  
#临时目录
tempDir=$filesTobeUpdated/temp  

#这里做一些校验,主要是判断上传的文件夹是否存在,以及文件下是否有文件
if [ -d $filesTobeUpdated ]
then

	file=`find $filesTobeUpdated -type f`
	if [[ $file = "" ]];
	
	then
		echo "no files avaliable in $filesTobeUpdated ,please check again!"
		exit 
	else
		echo "start  replace classes in $appJar"
	fi
else
	echo "dir $filesTobeUpdated is not avaliable,please check!"
	exit
fi 

#先备份下原先的应用xxx.jar改成自己的应用名
echo "backup the app"

cp $appJar $appHome/xxx.jar.bak

#创建下临时文件夹
echo "create the tempDir"
if [ ! -d $tempDir ];
then 
	mkdir $tempDir
fi

#开始从jar中替换文件

ifRepalcedFile="false"

for filename in $(ls $filesTobeUpdated)
do
	if [ -f "$filesTobeUpdated/$filename" ];
	then

	echo -e "正在jar包寻找$filename 所在路径" 

	tempClassFilePath=`jar -tf $appJar |grep -w "$filename"`
	if [ -z "$tempClassFilePath" ];
	then 
		echo -e "在jar包中未找到该文件: $filename\n"
		continue
	else
	echo -e "找到文件:$filename,所在jar包路径为: $tempClassFilePath\n"
	echo -e "开始从jar包中解压该文件到$tempDir 路径下.........."
	cd $tempDir 
	jar -xvf $appJar $tempClassFilePath

	echo -e "解压完毕\n"

	echo -e "开始替换解压后的文件......."
	cp $filesTobeUpdated/$filename "$tempDir/$tempClassFilePath"

	echo -e "替换完成\n"

	echo -e "开始替换jar中的class文件"
	jar -uvf $appJar $tempClassFilePath
    echo -e "替换完成\n\n\n\n\n\n\n"

	ifRepalcedFile="true"
	fi
   fi
done


if [ $ifRepalcedFile = "false" ];
then 
	echo -e "\n\n\n\n\n 未在jar包中找到class文件,替换失败!"
	exit

else 
	
	echo "替换成功,开始删除上传的class文件"
	if [ -d $filesTobeUpdated ]

	then
		cd $filesTobeUpdated
		rm -rf *
	fi

	echo -e "\n\n\n\n\n 开始重启应用 "
    cd $appHome
	sh run-$1.sh

fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ivan_梦方舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值