centos 项目上线shell脚本

最近在弄项目上线,然后写了个上线,备份,回滚的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

猜你喜欢

转载自www.cnblogs.com/Liang-jc/p/9123419.html