shell脚本---实现tomcat部署包自动打包并下载到本地

项目需求:现场tomcat业务系统部署手动打包,业务系统比较多,国内批量备份并打包给到现场进行升级操作
shell脚本代码如下:
功能实现:自动打包,可以选择是否下载到本地,但是需要手动输入路径

#! /bin/bash
source /etc/profile    #加载系统环境变量
source ~/.bash_profile  #加载用户环境变量
set -o nounset       #引用未初始化变量时退出
set -o errexit      #执行shell命令遇到错误时退出
date_tar=$(date +%Y-%m-%d_%H-%M-%S)
date=$(date +%Y-%m-%d)
package_path=/opt/pe_to_agl/$date
package_version="V4.5"

if [ ! -e $package_path ];then
  mkdir -p $package_path
fi

read -ep "请输入备份业务系统的路径: " choose_path
if [ ! -d ${choose_path} ];then
	echo "请输入正确路径,已退出"
	exit
else
echo "以下为检测到的业务系统:"
cd ${choose_path}
for dir in $(ls ${choose_path})
do
    [ -d ${dir} ] && echo ${dir} #先判断是否是目录,然后再输出
done

cd ${choose_path}
read -ep "请输入要备份的业务系统: " choose_name
function action_size(){
        mv ${choose_name}_${date_tar}_${package_version}.tar.gz $package_path
        cd $package_path
        size=$(du $package_path/${choose_name}_${date_tar}_${package_version}.tar.gz -sh | awk '{print $1}')
        echo "系统${choose_name} 压缩完成,大小${size},查看路径 $package_path"
}

function tar_packages(){
	cd ${choose_path}/${choose_name}
	if [ ! -d "webapps" ];then
                echo "$choose_path/${choose_name}下没有webapps文件夹,不符合Tomact备份格式,请确认后再试,已退出!"
                exit
	else
               echo "开始压缩文件"     
               cd ${choose_path}/${choose_name}/webapps
		if [ -d "ROOT" ];then
               		tar zcpvf ${choose_name}_${date_tar}_${package_version}.tar.gz ROOT
	       		action_size
		elif [ -d "cas" ];then
               		tar zcpvf ${choose_name}_${date_tar}_${package_version}.tar.gz cas
               		action_size
		elif [ -d "xxl-job-admin" ];then
                        tar zcpvf ${choose_name}_${date_tar}_${package_version}.tar.gz xxl-job-admin xxl-job-k007-executor-01
                        action_size
		fi
	fi
}

if test `$choose_name` == `${dir}`;then
	tar_packages
else 
       echo " 对不起,此路径不存在你输入的业务系统,即将退出!"
       exit

fi
echo "########################################################################"
echo "########################################################################"

read -ep "是否下载文件到本地?(y/n)" judge
if [ $judge = 'y' -o $judge = 'Y' ];then

usage() {
echo "$0 [base|workFlowEngine|settings|access|order|risk]"
}

usage

if [ $# -eq 1 ];then
path=$1

tar=`find ${package_path}/*${path}* -name "*.tar.gz" -type f`
echo "============开始下载tar.gz文件 $tar ============"
sz -b $tar

else
echo "==============开始下载 $package_path 下所有tar.gz文件=============="
for tar in $(find ${package_path}/ -name "*.tar.gz" -type f); do sz -b $tar;done
fi
echo "==============下载成功,请到本地目录自行查看==================="
else
  exit
fi
fi

附上前端web的打包脚本:

#! /bin/bash
source /etc/profile    #加载系统环境变量
source ~/.bash_profile  #加载用户环境变量
set -o nounset       #引用未初始化变量时退出
set -o errexit      #执行shell命令遇到错误时退出
date_tar=$(date +%Y-%m-%d_%H-%M-%S)
date=$(date +%Y-%m-%d)
package_path=/opt/pe_to_agl_web/$date
package_version="V4.5"

if [ ! -e $package_path ];then
  mkdir -p $package_path
fi

read -p "请输入备份业务系统的路径: " choose_path
if [ ! -d ${choose_path} ];then
	echo "请输入正确路径,已退出"
	exit
else
echo "以下为检测到的业务系统:"
cd ${choose_path}
for dir in $(ls ${choose_path})
do
    [ -d ${dir} ] && echo ${dir} #先判断是否是目录,然后再输出
done

cd ${choose_path}
read -p "请输入要备份的业务系统: " choose_name
function action_size(){
        mv ${choose_name}_${date_tar}_${package_version}.tar.gz $package_path
        cd $package_path
        size=$(du $package_path/${choose_name}_${date_tar}_${package_version}.tar.gz -sh | awk '{print $1}')
        echo "系统${choose_name} 压缩完成,大小${size},查看路径 $package_path"
}

if [ "${choose_name}" != ${dir} ];then

	cd ${choose_path}/${choose_name}
	if [ ! -d "dist" ];then
                echo "$choose_path/${choose_name}下没有webapps文件夹,不符合Tomact备份格式,请确认后再试,已退出!"
                exit
	else
               echo "开始压缩文件"     
               		tar zcpvf ${choose_name}_${date_tar}_${package_version}.tar.gz dist
	       		action_size
	fi
else
       echo " 对不起,此路径不存在你输入的业务系统,即将退出!"
       exit

fi
echo "########################################################################"
echo "########################################################################"

read -p "是否下载文件到本地?(y/n)" judge
if [ $judge = 'y' -o $judge = 'Y' ];then

usage() {
echo "$0 [base|workFlowEngine|settings|access|order|risk]"
}

usage

if [ $# -eq 1 ];then
path=$1

tar=`find ${package_path}/*${path}* -name "*.tar.gz" -type f`
echo "============开始下载tar.gz文件 $tar ============"
sz -b $tar

else
echo "==============开始下载 $package_path 下所有tar.gz文件=============="
for tar in $(find ${package_path}/ -name "*.tar.gz" -type f); do sz -b $tar;done
fi
echo "==============下载成功,请到本地目录自行查看==================="
else
  exit
fi
fi

附上更新后的前端脚本:【娇羞版本】
更新内容:
可以全部打包,也可以单独打包;
可以全部下载,也可以单独下载;
交互性更加完善

#! /bin/bash
###############################################我是分界线哦################################################################
###############################################开始加载了哦################################################################
source /etc/profile    #加载系统环境变量
source ~/.bash_profile  #加载用户环境变量
#set -o nounset       #引用未初始化变量时退出
#set -o errexit      #执行shell命令遇到错误时退出
###############################################下面是定义变量区了哦#########################################################
#定义打包的日期
date_tar=$(date +%Y-%m-%d_%H-%M-%S)
#定义日期
date=$(date +%Y-%m-%d)
#定义版本号
package_version="V4.5"
#定义备份路径
package_path=/opt/pe_to_agl_web/${date}_${package_version}

###############################################下面是定义函数区了哦#########################################################
#定义输入Ctrl+c不能退出的函数
#trap 'onCtrlc' INT
function onCtrlc(){
        echo "输入"quit"/"exit"才能离开我哦,你就这么忍心嘛~"
}
#准备工作的函数
function init(){
if [ ! -e $package_path ];then
  mkdir -p $package_path
fi
echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
echo ">>>百因必有果!你的报应就是我!我来啦!哈哈哈!!!"
while true; do
read -ep ">>>快告诉我你的愿望吧,想要备份的路径是啥!" choose_path
[ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
if [ ! -d ${choose_path} ];then
  echo ">>>这不是一个正确路径呢,你这个骗子,好好想想再告诉我!<<<"
  continue
elif [[ -z "${choose_path}" ]]; then
  echo ">>>你啥都没告诉我啊,让我怎么干活!快点儿再输入一次吧!<<<"
  continue
else
  echo ">>>下面是人家为你找到的业务系统哦!<<<"
  echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
#遍历目录列表并打印
cd ${choose_path}
for dir in $(ls ${choose_path})
do
    [ -d ${dir} ] && echo ${dir} && echo ${dir} >> ${choose_path}/list.txt #先判断是否是目录,然后再输出
done
break
fi
done 
}
#定义全部下载到本地的函数
function all_download(){
echo "########################################################################"
echo "########################################################################"
echo ">>>人家发现有下面这么多可下载的前端压缩文件呢!快夸我吧!<<<"
#遍历文件并打印
cd ${package_path}
for file in $(ls ${package_path})
do
    [ -f ${file} ] && echo ${file} #先判断是否是文件,然后再输出
done

read -ep ">>>我就插一句!你是否要全部下载文件到本地呢?(y/n)" all_down
if [ $all_down = 'y' -o $all_down = 'Y' ];then
all_tar=`find ${package_path}/ -name "*.tar.gz" -type f`
echo "##################开始下载 $package_path 下所有tar.gz文件了哦#####################"
for tr in $all_tar; 
  do 
  echo "==============开始下载 $tr文件了哦=============="
  sz -b $tr
  if [[ $? == 0 ]];then
    echo "==============$tr系统下载完成了呢,请回到本地目录仔细查看哦===================" 
fi 
done
#判断是否下载完成
if [[ $? == 0 ]];then
    echo "#################恭喜呀!系统全部下载完成了呢,请回到本地目录仔细查看哦######################" 
fi 
else
#判断备份路径下是否存在列表文件,有的话删除
  [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
  exit
fi
}
#定义所有文件打包的函数
function all_action_size(){
cd ${choose_path}
cat_list=`cat ${choose_path}/list.txt` 
#遍历list中的文件列表,并进行打包
        for sys in ${cat_list};do
                sleep 2
                #判断目录下是否存在dist文件夹
                cd ${choose_path}/${sys}
                if [ ! -d "dist" ];then
                echo ">>>人家在$choose_path/${sys}下没有dist文件夹呢,是不是你记错了呢?请确认后再来找我吧!我好累,要休息了哦"
                exit
                else
                echo ">>>开始压缩文件了哦"     
                tar zcpvf ${sys}.tar.gz dist
                mv ${sys}.tar.gz $package_path
                cd $package_path
                size=$(du $package_path/${sys}.tar.gz -sh | awk '{print $1}')
                  if [[ $? == 0 ]];then
                        echo ">>>系统${sys} 压缩完成了呢,大小${size},路径 $package_path下可以查看信息哦!" 
                  fi            
                fi               
        done
        all_download
}
#定义单独下载某个文件的函数
function single_download(){
read -ep "是否将${single}-web下载到本地呢?(y/n) " single_down
if [ $single_down = 'y' -o $single_down = 'Y' ];then
single_tar=`find ${package_path}/ -name "${single}-web.tar.gz" -type f`
echo "============开始下载tar.gz文件 $single_tar 喽!============"
sz -b $single_tar
if [[ $? == 0 ]];then
    echo "==============系统${single}-web 下载完成了呢,请回到本地目录仔细查看吧!===================" 
    echo "短暂的相遇就这样匆匆而过!"
fi 
else
  echo "短暂的相遇就这样匆匆而过!" 
fi
}
#定义单独打包某个文件夹的函数
function single_action_size(){
cat_single_list=`cat ${choose_path}/single_list.txt`
while true; 
do
#判断要打包的文件夹是否在列表中
if [ `grep -c "${single}-web" ${choose_path}/list.txt` -ne '0' ];then
for sg in ${cat_single_list};do
#判断路径下是否存在dist文件夹
  if [ ! -d "${choose_path}/${sg}/dist" ];then
                echo ">>>人家在$choose_path/${sg}下没有发现dist文件夹呢,是不是你记错了呢?请确认后重新告诉我吧<<<"
                continue
		break
  else
                echo ">>>开始压缩文件喽!<<<" 
                cd ${choose_path}/${sg}    
                tar zcpvf ${sg}.tar.gz dist
                mv ${sg}.tar.gz $package_path
                cd $package_path
                size=$(du $package_path/${sg}.tar.gz -sh | awk '{print $1}')  
                  if [[ $? == 0 ]];then
                        echo ">>>系统${sg} 压缩完成了呢,大小${size},路径 $package_path 下可以查看信息哦!<<<" 
                  fi                                             
  fi
done
single_download
break
else
       echo ">>>不好意思呢,人家在这个路径下没找到你输入的业务系统呀!<<<"
       break

fi
done
}
###############################################下面是工作区了哦#########################################################
#调用准备工作的函数
init
#定义退出变量,直到用户输入的字符串是quit时,until循环才会退出
QUIT_COMMAND=quit
#until [ "${USER_INPUT}" = "${QUIT_COMMAND}" ]
while true;
do
   echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
   echo ">>>人家还是个宝宝,记得输入正确的字符哦!不然我不懂呢"
   echo "(温馨提示:输入 "quit"/"exit" 退出程序)"
   #调用输入Ctrl+c不能退出的函数
   trap 'onCtrlc' INT
   read -ep ">>>现在有两种选择:全部备份(A/a),单个备份(B/b),告诉我你的选择吧!" USER_INPUT
   echo
   echo ">>您选择的是 $USER_INPUT呢!"
   #对用户的输入进行匹配
   case $USER_INPUT in
       "A" | "a")
               echo ">>>正在备份路径下所有的web系统呦~请耐心等待哦~"
               #调用全部打包的函数
               all_action_size
               echo ">>>恭喜!web系统已全部备份完成了! 轻轻的我走了,正如我轻轻地来~Byebye~"
               [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
               exit
               ;;
       "B" | "b")
              while true; do
               echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
               read -ep ">>>请输入想要备份的web系统名称,只用前缀就可以了哦~:" single
               #判断输入是否为空
               if [[ -z "${single}" ]]; then
                  echo ">>>你啥都没告诉我啊,让我怎么干活!请再输入一次!<<<"
                  continue
               else
                #清空之前的单独打包的列表,并打印
               cat /dev/null > ${choose_path}/single_list.txt && echo ${single}-web >> ${choose_path}/single_list.txt
               echo ">>>正在备份${single}-web呦~请耐心等待哦~"
               #调用单独打包的函数
               single_action_size 
               #输入quit才能退出            
               until [ "${USER_INPUT}" = "${QUIT_COMMAND}" ]
#                while true;
                do
                  #判断是否打包完成
                  if [[ $? == 0 ]];then
                        read -ep ">>>恭喜!${single}-web 已备份完成了呢!是否陪我继续呢?(y/n):" single2
                  else
                  read -ep ">>>是否陪我继续呢?(y/n):" single2
                  echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
                  fi
                 case $single2 in
                   "Y" | "y" )
                        echo ">>>嘻嘻,我又回来了呦,就知道你想我呢!"
                        echo ">>>开始干活喽!以下是人家为您检测到的业务系统哦,快夸我吧!<<<"
                        echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
                         cat ${choose_path}/list.txt 
                        break 
                        ;; 
                   "N" | "n")
                        [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
                        echo ">>>说好的爱我一辈子呢!你这个骗子!哼!不理你了!我走了!!!"
                        echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
                        exit 
                             
                        ;;
                    *)
                    echo ">>>能不能认真点儿!不是说了我还小嘛,太复杂的我不懂哦~看你这么诚恳,再给你次机会吧:"
                    ;;
                 esac
               done
               break
               fi
             done
               ;;
        "quit" | "exit")
                  break
                  ;;

        *)
        echo ">>>能不能认真点儿!不是说了我还小嘛,太复杂的我不懂哦~看你这么诚恳,再给你次机会吧:"
               ;;
   esac
   echo
   done
   echo ">>>百因必有果,你的报应就是我,记得爱我,么么哒~"
   [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
   exit 0

###############################################下面是注释区了哦#########################################################
###############################################都是改版前用到的#########################################################

#QUIT_COMMAND=quit
##直到用户输入的字符串是quit时,until循环才会退出
#until [ "$USER_INPUT" = "$QUIT_COMMAND" ]
#do
#   echo "Please input command"
#   echo "(type command $QUIT_COMMAND to exit)"
#   read USER_INPUT
#   echo
#   echo ">>your command is $USER_INPUT"
#
#   #对用户的输入进行匹配
#   case $USER_INPUT in
#       "open")
#               echo ">>opening..."
#               ;;
#       "close")
#               echo ">>closed"
#               ;;
#        *)
#               echo ">>Unknown command"
#               ;;
#   esac
#   echo
#   done
#   echo "Bye."
#   exit 0

#init
#read -ep "请选择:全部备份(A/a),单个备份(B/b):" choose
#        if [ $choose = 'A' -o $choose = 'a' ];then
#        echo "正在备份路径下所有web系统,请稍后..."
#       all_action_size
#       echo "恭喜!web系统已全部备份完成!"
#        [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
#       elif [ $choose = 'B' -o $choose = 'b' ];then
#       read -ep "请输入想要备份的web系统名称:" single
#             cat /dev/null > ${choose_path}/single_list.txt && echo $single >> ${choose_path}/single_list.txt
#             echo "正在备份$single 请稍后..."
#             single_action_size
#             echo "恭喜!$single 已备份完成!"
#             [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
#              exit  
#       else 
#       echo "您输入的字符不符合规则,不理你了..."
#        [ -f "${choose_path}/list.txt" ] && rm -f ${choose_path}/list.txt && rm -f ${choose_path}/single_list.txt
#       exit
#       fi  


###############################################我是分界线哦#########################################################

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值