shell學習之系統文件備份之腳本分析


如下的腳本最主要的一條命令就是:  linux

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下的文件增長了,咱們則進行增量備份以下:bash

tar -g /tmp/snapshot -czvf /tmp/2017_add_sysbak.tar.gz /data/sh/ ----再次利用原來的快照增量備份,只是備份增長的那部分文件ide


如下的腳本要實現的是規範的備份,能夠將其加入到crontab中指定在每晚凌晨執行,例如:函數

crontab -e測試

0  0 * * * /bin/bash /data/sh/toolscript/auto_system_backup.sh  /var/log/  >>/tmp/backup.log ###天天凌晨執行備份日誌目錄並追加相關日誌信息spa


-----------------------------腳本auto_system_backup.sh---------------------------------------------------------------------------------日誌

#!/bin/bashorm

#automatic backup linux system filesblog

#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 ##調用函數,代碼的執行順序是函數最後執行,先執行前面的兩個判斷語句再調用函數處理

---------------------------------------------------------------------------------------------------------

如下是本人的測試信息:

wKioL1jjTUmhGOW1AAA1C5iEx0Y277.png-wh_50

最後提示的是增量更新成功,若是要進行完整 更新能夠將系統時間修改到星期天,或者修改代碼中的[ "$WEEK" -eq "7" ]爲你當前系統的時間,再去執行該腳本。

wKioL1jjULngDknZAABcuEY-fwQ284.png-wh_50

能夠看到上圖中的備份文件/09/0002_system_backup.tgz週末9號的完整備份,04/update1549_system_backup.tgz週二4號的增量備份


注:以上的腳本能夠根據您的實際須要進行更改,實現更多的功能。

相關文章
相關標籤/搜索