Shell脚本实现按目录备份、发布、回滚

分享最近写的一段Shell脚本,用来实现按发布包的文件目录结构备份生产线文件,以及回滚操作。

  1 #!/bin/sh
  2 path="/home/www/site1"
  3 pub=$path"/release/pub/MBOXII/trunk" #发布目录
  4 bak=$path"/release/bak" #生产目录备份文件
  5 prod=$path #生产目录
  6 pub_file_plus=$path"/release/pub_plus.txt" #增量文件:发布包相对生产包的新增文件列表日志
  7 
  8 #执行备份
  9 dobak(){
 10     #删除之前的备份文件(夹)
 11     for file in $(ls $bak)
 12     do
 13         #echo $bak"/"$file
 14         rm -rf $bak"/"$file
 15     done
 16     if [ -f $pub_file_plus ]
 17     then
 18         rm -rf $pub_file_plus
 19     fi
 20     #将发布目录对应的生产目录的文件(夹)按原结构备份
 21     function read_dir(){
 22         for file in `ls $1`
 23         do
 24             dir_r=$1"/"$file
 25             dir_p=${dir_r/#$pub/$prod}
 26             dir_b=${dir_r/#$pub/$bak}
 27             if [ -d $dir_r ]  #注意此处之间一定要加上空格,否则会报错
 28             then
 29                 if [ -d $dir_p ]
 30                 then
 31                     #echo $dir_b
 32                     mkdir -p -m 755 $dir_b #创建对应的备份文件夹
 33                     read_dir $1"/"$file #递归子目录
 34                 else
 35                     echo $dir_p &>>$pub_file_plus
 36                 fi
 37             else
 38                 if [ -f $dir_p ]
 39                 then
 40                     #echo $dir_p" "$dir_b
 41                     cp $dir_p $dir_b
 42                 else
 43                     echo $dir_p &>>$pub_file_plus
 44                 fi
 45             fi
 46         done
 47     }
 48     read_dir $pub
 49     echo '备份完成'
 50 }
 51 
 52 #执行发布
 53 dopub(){
 54     cp -arf $pub/* $prod
 55     echo '发布完成'
 56 }
 57 
 58 #执行回滚
 59 dorollback(){
 60     for file in $(cat $pub_file_plus)
 61     do
 62         #echo $bak"/"$file
 63         rm -rf $file
 64     done
 65     cp -arf $bak/* $prod
 66     echo '回滚完成'
 67 }
 68 
 69 usage() {
 70     cat <<EOF
 71         产品发布脚本使用方法:
 72         1       备份
 73         2       发布
 74         3       回滚
 75         4       退出
 76 EOF
 77 }
 78 
 79 usage
 80 echo '请输入操作指令:'
 81 read cmd
 82 while [ $cmd != 'exit' ]
 83 do
 84     case $cmd in
 85         1)
 86             dobak
 87             ;;   
 88         2)
 89             dopub
 90             ;;
 91         3)
 92             dorollback
 93             ;;
 94         4)
 95             #exit
 96             break
 97             ;;
 98         *)
 99             usage
100             ;;
101     esac
102     echo '请输入操作指令:'
103     read cmd
104 done

猜你喜欢

转载自www.cnblogs.com/guizitc110/p/9335501.html