weiliwei 发表于 2018-8-20 10:51:49

shell学习之系统文件备份之脚本分析

  以下的脚本最主要的一条命令就是:
  cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]} ##创建好的备份目录中,执行备份命令,以下就是一个完整的命令例子:
  tar -g /tmp/snapshot -czvf /tmp/2017_full_sysbak.tar.gz /data/sh ##第一次创建快照完整备份,将/data/sh目录打包压缩到/tmp/下并保存为2017_full_sysbak.tar.gz,如果/data/sh下的文件增加了,我们则进行增量备份如下:
  tar -g /tmp/snapshot -czvf /tmp/2017_add_sysbak.tar.gz /data/sh/ ----再次利用原来的快照增量备份,只是备份增加的那部分文件
  以下的脚本要实现的是规范的备份,可以将其加入到crontab中指定在每晚凌晨执行,例如:
  crontab -e
  00 * * * /bin/bash /data/sh/toolscript/auto_system_backup.sh/var/log/>>/tmp/backup.log ###每天凌晨执行备份日志目录并追加相关日志信息
  -----------------------------脚本auto_system_backup.sh---------------------------------------------------------------------------------
  #!/bin/bash
  #automatic backup linux system files
  #author robin 2017-4-4
  #define variable   ##参数定义
  SOURCE_DIR=( $* )    ##以数组的形式存放需要备份的目录,执行脚本时需要手动指定
  TARGET_DIR=/data/backup/##指定备份路径
  YEAR=`date +%Y`   ##年参数,这些都是用于建立层级目录
  MONTH=`date +%m` ##月参数
  DAY=`date +%d`##日参数
  WEEK=`date +%u` ##星期参数
  A_NAME=`date +%H%M` ##时分参数
  FILES=${A_NAME}_system_backup.tgz##定义压缩文件格式,也可以压缩为别的tar.gz等格式
  CODE=$? ##判断是否有错
  #Juge the inter file exist###这里首先要判断在执行脚本时有没有指定参数,也就是要备份的目录
  if [ -z "$*" ];then       #如果没有指定参数则提示你
  echo -e "\033[32mUsage:\nPlease Enter Your Backup Files or Directories\n-------------------------------\n\nUsage: { $0 /boot /etc} \033[0m"##提示信息
  exit
  fi
  #Determine Whether the Target Directory Exists ##注释信息
  if [ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then ##判断当天的备份目录是否存在
  mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY   ##创建该目录
  echo -e "\033[32mThe $TARGET_DIR Created Successfully! \033[0m"##提示信息
  #EXEC Full_Backup Function Command##提示以下是完整备份函数
  Full_Backup()
  {
  if [ "$WEEK" -eq "7" ];then##这里指定的是周末进行完整备份
  rm -rf $TARGET_DIR/snapshot##首先删除掉原有本分目录下的快照
  cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]}##这里就是完整备份的命令,解释一下${SOURCE_DIR[@]},这就是你需要指定的一个或者多个需要备份的目录,以数组形式存在,例如:sh /date/auto_backup.sh /etc /home
  [ "$CODE" == "0" ]&&echo -e "----------------------------\n\033[32mThese Full_Backup System Files Backup SuccessFully !\033[0m"##提示信息,表示如果以上的命令都没有问题则出现提示信息表示成功。下面一个函数也一样
  fi
  }
  #Perform incremental BACPUP Function Command##提示下面是增量更新的函数
  Add_Backup()
  {
  if [ "$WEEK" -ne "7" ];then##这里指定的是除开周末则进行增量更新
  cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf update$FILES ${SOURCE_DIR[@]} ##这条语句的差别与上面一条在于备份名字罢了
  [ "$CODE" == "0" ]&&echo -e "----------------------------\n\033[32mThese Full_Backup System Files $TARGET_DIR/$YEAR/$MONTH/$DAY/${YEAR}_$A_NAME$FILES Backup SuccessFully !\033[0m" ##也是提示信息
  fi
  }
  sleep 3 ##延时3秒在继续以下动作
  Full_Backup;Add_Backup ##调用函数,代码的执行顺序是函数最后执行,先执行前面的两个判断语句再调用函数处理
  ---------------------------------------------------------------------------------------------------------
  以下是本人的测试信息:

  最后提示的是增量更新成功,如果要进行完整 更新可以将系统时间修改到星期天,或者修改代码中的[ "$WEEK" -eq "7" ]为你当前系统的时间,再去执行该脚本。

  可以看到上图中的备份文件/09/0002_system_backup.tgz周末9号的完整备份,04/update1549_system_backup.tgz周二4号的增量备份
  注:以上的脚本可以根据您的实际需要进行更改,实现更多的功能。

页: [1]
查看完整版本: shell学习之系统文件备份之脚本分析