2011年9月21日 星期三

[Bash Script]將筆電中的資料備份到備份主機 (V201109210305)

前一版邏輯有嚴重錯誤而且寫得太囉唆了,全部重寫~~~~~~~
ChangeLog
1. if 條件判斷改用設檢查旗標的方式同時用了『複合條件判斷』以濃縮長度。
2.『全變數化』以方便維護跟新增備份標的。

筆電中放著不少重要資料,還是備份一下比較安心。

條件一樣是,
1.筆電在家且連得到備份主機才進行備份
2.自動砍掉三天以前的備份

Script 內容如下,

#!/bin/bash
#DailyBackUpV201109210305.sh
#備份筆電中的重要資料
#Verio:3.0
#Time:201109210305
#Max Lin max@mpsstudio.org

#定義變數
LogFile="$HOME/BackUpLog/DailyBackUp.log"
RemoteHost="10.128.0.100"
TEMPDir="/tmp/DocBack"
LXDETEMPDir=""$TEMPDir"/LXDE"
ScriptTEMPDir=""$TEMPDir"/Script"
DocTEMPDir=""$TEMPDir"/Doc"
MyPassWord="1979576"
MyAccount="亞利安人"
MountHomeDir='/home/max/sharedir'
LocalMountDir=""$MountHomeDir"/100DocBackup"
RemoteHostMountOption="rw,noperm,nosuid,username="$MyAccount",password="$MyPassWord",iocharset=utf8,codepage=cp950"
LXDEBackDir="/home/max/.config/lxpanel/LXDE/"
ScriptBackDir="/home/max/Script"
DocMountPoint="/media/DATABack"
DocBackDir=""$DocMountPoint"/002.文件/"

#Start

#確認遠端備份主機連線狀態
ping -c 2 $RemoteHost > /dev/null
ConnectCheck=$?

#確認備份儲存目錄是否已掛載
mount | grep "100DocBackup" > /dev/null
RemoteHostMountCheck=$?
if [ $RemoteHostMountCheck -ne '0' ] ; then

#掛載遠端文件備份掛載目錄
echo "$MyPassWord" | sudo -S mount -t cifs //"$RemoteHost"/DocBackup "$LocalMountDir" -o "$RemoteHostMountOption"
RemoteHostMountCheck=$?
else
RemoteHostMountCheck=0
fi


if [ $ConnectCheck -eq '0' -a $RemoteHostMountCheck -eq '0' ]; then

echo "`date '+%Y%m%d'` ---- 備份作業開始 --------" >> $LogFile
echo "`date '+%Y%m%d'` ==== 備份開始時間`date '+%H:%M:%S'`" >> $LogFile

#備份LXDE設定檔
mkdir -p "$LXDETEMPDir"
tar jcvf "$LXDETEMPDir"/LXDEConfigBackUp`date '+%Y%m%d'`.tar.bz2 "$LXDEBackDir"
LXDETar=$?
cp -r "$LXDETEMPDir"/* "$LocalMountDir"
LXDECpCheck=$?

if [ $LXDETar -eq '0' -a $LXDECpCheck -eq '0' ] ; then
echo "`date '+%Y%m%d'` LXDE設定檔備份作業完成~~~" >> $LogFile
else
echo "`date '+%Y%m%d'` LXDE設定檔備份作業未完成!!!!" >> $LogFile
fi


#備份Script
mkdir -p "$ScriptTEMPDir"
tar jcvf "$ScriptTEMPDir"/ScriptBackUp`date '+%Y%m%d'`.tar.bz2 "$ScriptBackDir"
ScriptTar=$?
cp -r "$ScriptTEMPDir"/* "$LocalMountDir"
ScriptCpCheck=$?
if [ $ScriptTar -eq '0' -a $ScriptCpCheck -eq '0' ] ; then
echo "`date '+%Y%m%d'` Script備份作業完成~~~" >> $LogFile
else
echo "`date '+%Y%m%d'` ScriptCpCheck備份作業未完成!!!!" >> $LogFile
fi

#文件備份
mkdir -p "$DocTEMPDir"
mount | grep "$DocMountPoint"
DocMountPointCheck=$?
if [ $DocMountPointCheck -eq '0' ] ; then
tar jcvf "$DocTEMPDir"/DocBackUp`date '+%Y%m%d'`.tar.bz2 "$DocBackDir"
DocTar=$?
cp -r "$DocTEMPDir"/* "$LocalMountDir"
DocCpCheck=$?
else
echo "$MyPassWord" | sudo -S mount -t ext4 /dev/sda4 "$DocMountPoint"
ReMountCheck=$?
if [ $ReMountCheck -eq '0' ] ; then
tar jcvf "$DocTEMPDir"/DocBackUp`date '+%Y%m%d'`.tar.bz2 "$DocBackDir"
DocTar=$?
cp -r "$DocTEMPDir"/* "$LocalMountDir"
DocCpCheck=$?
DocMountPointCheck=0
else
DocMountPointCheck=1
fi

fi
if [ $DocMountPointCheck -eq '0' -a $DocTar -eq '0' -a $DocCpCheck -eq '0' ]; then

echo "`date '+%Y%m%d'` Doc備份作業完成~~~" >> $LogFile
else
echo "`date '+%Y%m%d'` Doc備份作業未完成!!!!" >> $LogFile
fi

#刪除暫存目錄
rm -rf $TEMPDir
#刪除遠端備份目錄中三天前的備份檔
find ""$LocalMountDir"/" -type f -mtime +3 -exec rm -f {} \;
#確認文件備份目錄是否還掛載著
mount="$DocMountPoint"
DocMountPointCheck=$?
if [ $DocMountPointCheck -eq '0' ] ; then
#卸載遠端備份目錄
echo "$MyPassWord" | sudo -S umount "$DocMountPoint"
fi
#確認備份儲存目錄是否仍掛載
mount | grep "$LocalMountDir" > /dev/null
RemoteHostMountCheck=$?
if [ $RemoteHostMountCheck -eq '0' ] ; then
#卸載遠端備份目錄
echo "$MyPassWord" | sudo -S umount "$LocalMountDir"
fi
echo "`date '+%Y%m%d'` ==== 備份結束時間`date '+%H:%M:%S'`" >> $LogFile
echo "`date '+%Y%m%d'` >>>> 備份作業完成 <<<<<<<<" >> $LogFile
else

echo "`date '+%Y%m%d'` 遠端備份目錄離線中或無法掛載遠端儲存設備,備份作業未開始!!!!"

fi                         
Powered By Blogger