最近在弄项目上线,然后写了个上线,备份,回滚的shell脚本
上线可根据自己公司项目做相关操作,备份回滚可修改目录则可实现
主管要求用shell写,那就用shell写吧 本想Python写更好的 哈哈哈
shell有个关于字典和数组结合的方式没有Python灵活,其实日常脚本我觉得还是ok的
如需转载,请提及出处,谢谢哈
#!/bin/bash select=' ------------------------------\n 请选择:\n \t1.上线\n \t2.备份\n \t3.回滚\n \tq.返回\n -----------------------------\n ' project=' ------------------------------\n 请选择:\n \t1.hq88\n \t2.da\n \t3.huaqibang\n \t4.sfxt\n \t5.退出\n -----------------------------\n ' project_path='/data/server/tomcat' #设置tomcat项目路径 date=$(date +%Y%m%d) #日期 年月日 flag_line="##################上线####################" flag_bak="##################备份####################" flag_roll="##################回滚####################" function login(){ while true;do echo -e $project read -p '请选择以上数字:' num case $num in 1) hq88 ;; 2) da ;; 3) huaqibang ;; 4) sfxt ;; 5) break ;; *) echo 输入有误,请重新输入\n ;; esac done; } function line(){ #上线 echo $flag_line echo 项目存在的代码文件: echo $(ls -l|awk -F ' ' '{print $9}') } function bak(){ #备份 echo $flag_bak echo 项目存在的代码文件: #echo $(ls -l|awk -F ' ' '{print $9}') countss=1 cd $project_path/$project_name #全局变量 for filenames in $(ls -l| awk -F ' ' '{print $9}' ) do echo -e "\t$countss:$filenames" namess[$countss]=$filenames countss=$(($countss+1)) done tar cvf webroot$date.tar webroot #read -p "请选择你要备份的项目编号:" num echo -e 备份完成,列表如下: echo -e "$(ls -l|awk -F ' ' '{print $9}')" } function roll(){ #回滚 echo $flag_roll cd $project_path/$project_name #全局变量 declare -a wroll while true;do echo "webroot源如下:" rcount=1 for rollname in $(ls -l| awk -F ' ' '{print $9}' ) do wroll[$rcount]=$rollname echo -e "\t$rcount:$rollname" rcount=$(($rcount+1)) done echo -e "\tq:返回" rlen=$((${#wroll[*]})) #数组长度 read -p "请你选择回滚的项目": num echo $rlen if [ $num == "q" ] then break elif [ $num -le $rlen ] then if [ $num -eq "1" ] then echo "webroot本身无需回滚" else echo -e "回滚项目为:${wroll[num]}" rm -rf webroot tar xvf ${wroll[num]} echo -e "回滚完成!" fi else echo "项目不存在" fi done } function option(){ #上线备份回滚退出 while true;do echo -e $select read -p '请选择以下编号:' num case $num in 1) line ;; 2) bak ;; 3) roll ;; "q") break ;; *) echo 输入有误,请重新输入\n ;; esac done; } function hq88(){ list_name hq88 #option } function da(){ list_name da #option } function huaqibang(){ list_name huaqibang #option } function sfxt(){ list_name sfxt #option } function list_select(){ #列表选择 echo 1 } function list_name(){ #列出名字 hq88 da huaqibang sfxt flist=$(ls -l $project_path |awk -F ' ' '{print $9}' ) declare -a names #声明数组 declare -A dic_names #声明字典 while true;do echo -e "########$1项目列表########" count=1 #counts=1 echo -e "\n" for i in $flist: do if [[ $i =~ "$1" ]] then # [[ $i =~ "$1" ]] && echo $i echo $count:$i names[$count]=$i count=$(($count+1)) fi done #for values in $(echo ${dic_names[*]}) #do # echo $values #done echo "q:返回 " len=$((${#names[*]}+1)) #数组列表长度 #echo $len #echo ${dic_names[*]} read -p "请选择项目对应的编号:" num if [ $num == "q" ] then break elif [ $num -lt $len ] then cd $project_path/${names[$num]} echo "项目路径:$(pwd)" project_name=${names[$num]} echo $project_name #cd webroot #echo "项目代码操作路径:$(pwd)" option else echo "输入数字不存在" fi echo $num done } login