svn全量备份脚本解释

#!/bin/bash   下面的代码使用bash进行编译,#是注释的标识

#This scripts for full bakcup svn repository!

#Define Variable , shell变量没有修饰符,是全局变量

SVN="/usr/local/svn"    #用于存放错误日志的目录

SVN_PRO="/usr/local/svn/bin/svnadmin hotcopy" #svnadmin hotcopy指令的路径,前面的目录可以在环境变量中配置

SVN_LOOK="/usr/local/svn/bin/svnlook youngest"  #svnlook youngest指令的路径,前面的目录可以在环境变量中配置,用于获取版本号

SVN_ROOT=/svn #需要备份的目录

SVN_BACKUP=/svn_backup #备份保存的目录

BACKUP_DATE=$(date +%Y-%m-%d)  #获取备份的日期,日期格式为2013-07-02

#check up backup root directory if exist !     判断备份目录是否存在

if [ ! -e /svn_backup ]    #! -e不存在的意思

then  mkdir /svn_backup  #then与if是一对判断词,默认的还有else,else后无语句,可以省略

fi   #if 的结束此 ,case的结束词是esac

#check mount point if not mount 判断能否联通192.168.1.26的服务器

IP="192.168.1.26"   #定义新的变量IP

ping -c 1 -w 1 $IP &>/dev/null  #使用变量时,要在变量前加$

#ping -c 1 -w 1 $IP  表示测试连接服务器,在前台执行,如果此时输入命令,则不被执行,在前台输出

#ping -c 1 -w 1 $IP & 表示测试连接服务器,在后台执行,如果此时输入命令,则可以被执行,在前台输出,&表示在后台执行

#ping -c 1 -w 1 $IP &>/dev/null 表示表示测试连接服务器,在后台执行,并且不在前台输出,>表示将输出引入到,/dev/null表示一个空文件,进去的内容都会丢失,从里面                                                    #也读不到任何信息

if [ $? = 0 ]   #$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

then       

      #检查文件系统的磁盘空间占用情况,并挂载windows共享盘,也就是使windows下共享盘在linux下可读
      #如果操作失败则将日志写在backup_error.log中,退出 

      #df用于检查磁盘空间占用情况,df -k 表示以k字节为单位显示 

   df -k | grep $IP &>/dev/null || mount -t cifs //$IP/svnbackup $SVN_BACKUP -o password=123456

else  echo "$(date +%Y-%m-%d-%T)==>Backup Computer[$IP] already shutdown!" >>$SVN/backup_error.log  

echo " " >>$SVN/backup_error.log        

exit 1 

fi

#Get repo directory name

REPO_NAME_LIST=$(ls $SVN_ROOT)  #获取需要备份目录及文件信息

#define logfile

LOGFILE=$SVN_BACKUP/full_backup.log  #定义日志文件名称

#output a backup date to log file

echo "====================$BACKUP_DATE========================" >>$LOGFILE  #将备份日期输入到full_backup.log 里

#check up backup directory if exist then exit,if not exist mkdir

if [ -e $SVN_BACKUP/Full_"$BACKUP_DATE" ] #判断今日是否已备份,如果没有,则创建文件

then  echo "$(date +%T)==>$SVN_BACKUP/Full_"$BACKUP_DATE" already exists!" >>$LOGFILE  

        echo "Thers is no need backup again!" >>$LOGFILE  

        exit 1

else  mkdir $SVN_BACKUP/Full_"$BACKUP_DATE"

fi

#mkdir full_repo_number if not exsits!

#full_repo_number purpose is leave with repo number single file for each repo

if [ ! -e $SVN_BACKUP/full_repo_number ]

then  

  mkdir $SVN_BACKUP/full_repo_number

fi

#define variables for full_repo_numher

FULL_REPO_VERSION=$SVN_BACKUP/full_repo_number

#start backup

for repo_name in $REPO_NAME_LIST

do  

#get repo version  

  get_repo_version=$($SVN_LOOK $SVN_ROOT/$repo_name) #使用svnlook youngest指令获取SVN_ROOT/repo_name这个文件的版本号

 #full backup  全量备份

$SVN_PRO $SVN_ROOT/$repo_name  $SVN_BACKUP/Full_"$BACKUP_DATE"/$repo_name #使用svnadmin hotcopy指令备份SVN_ROOT/repo_name 到                                                                                                                                              #SVN_BACKUP/Full_"BACKUP_DATE"/repo_name

        echo "$(date +%T)==> repository:[$repo_name] at version($get_repo_version) Successfull Full Backup !" >>$LOGFILE

 #output repo version number to /svn_backup/full_repo_number directory  将版本号写入$repo_name.number文件中

  echo "$get_repo_version" >$FULL_REPO_VERSION/$repo_name.number 

done

#output a blank line to log file

echo "" >>$LOGFILE  #给full_backup.log 文件加一个空行

原文地址:https://www.cnblogs.com/huhu-xiaomaomi/p/3167304.html