#!/bin/bash
###############################################################################
#			backup.SH v1.0					      #
#這個shell 由vincent yu 撰寫，全部或部份內容皆允許透過電子形式自由傳播，但請將#
#最底下之版權所有相關訊息予以保留，並請註明來源出處。如果您要對這個shell全部或#
#部份內容加以修改或更改以及提供他人下載本shell的網站，請先行知會本人。如有其他#
#意見也歡迎與我聯絡   	  e-mail : vincent@ms.vmy.idv.tw                      #
#		          msn    :vincent@ms.vmy.idv.tw			      #
#本程式還會陸續加入新功能，下次目標---> NFS,SSL,SSH			      #													
#........提供下載的網站..........					      #
#      1.鳥哥的私房菜館							      #
#									      #
###############################################################################        
#
#setting
PATH=/bin/:/usr/bin
#.........................................
#ftp setting
ftpurl=
ftpid=
ftppwd=
ftpmode=binary
#........................................
#幾天前檔案，修改deadline後面數值
deadline=3
#備份路徑 backup path
backupdir=/var/db/backup
#log路徑 log path
logpath=/var/log
#log 檔案名稱 file name
logfile=backup.log
#.......................................
#備份模式 backup mode
#backupnum=1 -> ftp,   2->tape,    3-> disk
backupnum=3
#磁帶機裝置 tape dev
tapedev=/dev/st0
#備份檔案 請注意文字前後要以雙引號包起來
backupfile="/etc/passwd /etc/shadow* /etc/group* /etc/mail/sendmail.mc /var/mail /var/spool/mqueue /home"
#---------------以下不用動----------------------
#........................................
day=`date -d"$deadline day ago" +%Y%m%d`
today=`date +%Y%m%d`
#....................................
del_creat_file ()
{
	case $* in
		1) 
		if [ ! -d $backupdir/$day]; then
			return 0
		else
 			mkdir $backupdir/$today
			return 0
		fi ;;  
		2)	
		if [ ! -d $backupdir/$day]; then
                        return 0
		else
 			rm -Rf $backupdir/$day
			return 0
		fi ;;
	esac
}
#.......................................
#ftp function
ftpconnect ()
{
	#get the file
	ftp -vin $ftpurl <<command
	user $ftpid $ftppwd $ftpid@ftpurl
	$ftpmode
	lcd $backupdir/$today/
	put $today"backup.tar"
	bye
command
	return 0 
}
#''''''''''''''''''''''''''''''''''''''''''''
#write log file
writelog ()
{
	case $1 in
		1) 
		   date +"%a %h %d %T %Y Backup Beginning" >> $logpath/$logfile
		   return 0 ;;
		2) 
		   date +"%a %h %d %T %Y  ERROR!! Check backupnum option " >> $logpath/$logfile
		   echo date +"%a %h %d %T %Y  ERROR!! Check backupnum option "	
		   return 0 ;;
		3) 
		   date +"%a %h %d %T %Y Backup Successful" >> $logpath/$logfile 
		   return 0 ;;		
	esac		
}
#backup start
writelog 1
#backup file
case $backupnum in
      1 )
	del_creat_file 1
     	tar -cvf $backupdir/$today/$today"backup.tar" $backupfile 
	ftpconnect
	writelog 3 ;;
      2 )
	del_creat_file 1
        tar -cvf $tapedev $backupfile 
	del_creat_file 2
	writelog 3 ;;
      3 )
	del_creat_file 1
	tar -cvf $backupdir/$today/$today"backup.tar" $backupfile
	echo $backupfile
	writelog 3;;
      * )
	writelog 2;exit 0 ;;
esac
del_creat_file 2