Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Backup Script in SH script  (gelezen 2449 keer)

Ricardo1990

  • Gast
Backup Script in SH script
« Gepost op: 2009/10/20, 18:09:37 »
ik wil een backup script maken maar kom er niet helemaal uit met het gebruik van tar op een gegeven moment.
In dit script wordt er gevraagd of de gebruiker er zeker van is dat hij een backup wilt maken, zo niet sluit het script zich af na het tonen van een echo met wat teks. Als er met ja wordt geantwoord zal er meteen een 2 de vraag komen waar de gebruiker moet antwoorden of hij een incrementele of volledige backup wilt. Bij een incrementele backup moet er gecontroleerd worden of er al een backup bestaat in /var/backups. Als deze backup al bestaat wordt er gecontroleerd of deze 7 dagen of ouder is, zo ja dan moet er een nieuwe volledige backup gemaakt worden. Als er nog geen backup is moet er ook een volledige backup gemaakt worden.
Bij de optie volledige backup moet er gecontroleerd worden of er al een backup bestaat, zo ja wordt er gevraagd of deze overschreven moet worden, indien hier met ja geantwoord wordt de oude backup verwijderd en de nieuwe gewoon in de /var/backups geplaatst. Indien met nee geantwoord dan wordt het script gewoon afgesloten na het tonen van een berichtje.

Het script structuur heb ik eindelijk volledig werkend gekregen alles verwijst goed naar elkaar en ik hoef dan ook alleen nog maar hulp bij het daadwerkelijk maken van de volledige backup en de incrementele backup. De rest kan ik zelf nog wel uitzoeken, maar van deze 2 onderdelen snap ik echt niks van.

Plz kan iemand mij helpen?

hier is mijn code, en ja hij is wel beetje lang maar ik heb er genoeg commentaar in gezet anders werd ik helemaal gek als ik ff wegmoest en daarna weer verder ging(toen had ik zoiets van hoe zat et ook al weer in elkaar):

#!/bin/bash

# Controleer of het script geen argumenten heeft.
if [ ! $# == 0 ]; then

echo "Usage: $ werkt alleen zonder argumenten."
exit

# Bij geen argumenten.
else

# Invoer van de gebruiker of het zeker is dat de gebruiker een backup wilt.
echo "Wilt u een backup maken van uw Home directory?"

read commando

echo

# Als de gebruiker echt een backup wilt.
if [ $commando == ja ] || [ $commando == j ] || [ $commando == JA ]; then

# Zet de current working directory in een variabele.
pwd="`pwd`"

echo $pwd

# Zet de username in een variabele.
user=`echo $USERNAME`

# Zet de home directory in een variabele maar dan zonder de "/" voor de home directory.
home=`echo $HOME | grep /home/* | sed 's|/home/|home/|'`

# Zet de datum in de goede volgorde DD-MM-YYYY en uiteindelijk in een variabele.
jaar=`date +%Y`
maand=`date +%m`
dag=`date +%d`
date=$dag-$maand-$jaar

# Vraag de gebruiker of hij / zij een incrementele of volledige backup wilt.
echo "Wat voor soort backup wilt u: Incrementeel of Volledig?"

read invoer

echo

# Als de optie incrementeel wordt gekozen.
if [ $invoer == incrementeel ]; then

# Geeft de mogelijke backup naam in een variabele
file=*-*-backup.tar.gz
 
# Controleert of er een mogelijke backup bestaat
if [ -f $file ]; then

echo "File $file exists."
echo
check='true'

# Mogelijke backup bestaat niet
else

echo "File $file does NOT exists."
echo
check='false'

fi

# Controleer of er al een backup is.
if [ $check == true ]; then

echo "Bestaat al"
echo "MOET NOG GEDAAN WORDEN!!!!"
echo

# Controleer of de bestaande backup niet ouder is dan 7 dagen.
if [ $datum_creatie_tot_nu <= "7" ]; then

echo "Maak incrementele backup. --> MOET NOG GEDAAN WORDEN!!!!"
echo
exit

# Als de backup wel ouder is als 7 dagen.
elif [ $datum_creatie -gt "7" ]; then

echo "Maak volledige backup. (verwijzing naar volledige backup verderop)"
echo
invoer='volledig'

fi

# Als er geen backup is.
elif [ $check == false ]; then

echo "Bestaat niet, moet volledig backup maken.(verwijzing naar volledige backup verderop)"
echo
invoer='volledig'

fi

fi

# Als de optie volledig wordt gekozen of bij incrementeel is de backup ouder dan 7 dagen
# of de backup bestaat nog niet.
if [ $invoer == volledig ]; then

# Geeft de mogelijke backup naam in een variabele
file=*-*-backup.tar.gz
 
# Controleert of er een mogelijke backup bestaat
if [ -f $file ]; then

echo "File $file exists."
echo
check='true'

# Mogelijke backup bestaat niet
else

echo "File $file does NOT exists."
echo
check='false'

fi

# Controleer of er al een backup is.
if [ $check == true ]; then

echo "Bestaat al"
echo

# Vraag of deze overschreven moet worden.
echo "Wilt u $file overschrijven? Antwoord met ja of nee en druk op [ENTER]."

read overschrijf
echo

# Indien wel overschreven.
if [ $overschrijf == ja ]; then

echo "Delete $file (MOET NOG GEDAAN WORDEN!!!!!)"
echo "Maak nieuwe volledige backup (verwijzing naar verderop)"
check='false'
echo

# Indien niet overschreven.
elif [ $overschrijf == nee ]; then

echo "Backup wordt niet uitgevoerd."
echo "script wordt nu afgesloten."
echo
exit

fi

elif [ $check == false ]; then

echo "Bestaat niet of moet worden overschreven."
echo "Voer volledige backup eindelijk uit."
echo "(MOET NOG GEDAAN WORDEN!!!!!) hier moet dus de code komen voor de backup van de home directory naar de /var/backups maar dan lukt me niet!!!!"
exit

fi

else

echo "U heeft iets verkeerds ingetypt $invoer is niet geldig."
echo
exit

fi

else

echo "Nu nog even niet, ben nog bezig"
exit

fi

fi




PS ik hoop dat iemand mij kan helpen ik kom er echt niet uit en dit scriptje wil ik echt zo graag werkend hebben.

MVG Ricardo


Moderator edit: code-tags toegevoegd
« Laatst bewerkt op: 2009/10/20, 18:50:34 door Nunslaughter »

Offline muksie

  • Lid
Re: Backup Script in SH script
« Reactie #1 Gepost op: 2009/10/21, 12:25:46 »
Voor het maken van een volledige backup kun je eenvoudig tar gebruiken. Bijvoorbeeld tar -cvzf $NEW_BACKUP.tar.gz $DIRS. Een incrementele backup is iets lastiger, maar het beste is waarschijnlijk om met find de bestanden te vinden die gewijzigd zijn sinds de laatste backup en dat vervolgens toe te voegen aan de backup. Bijvoorbeeld iets van find $DIRS -mtime -3 -type f -print | tar $INCREMENTAL_BACKUP.tar.gz -T-Eventueel kun je hiervoor misschien ook de -u optie van tar gebruiken om een bestaande backup te updaten.

Ricardo1990

  • Gast
Re: Backup Script in SH script
« Reactie #2 Gepost op: 2009/10/21, 17:13:00 »
Voor het maken van een volledige backup kun je eenvoudig tar gebruiken. Bijvoorbeeld tar -cvzf $NEW_BACKUP.tar.gz $DIRS

maar als ik nou deze backup in de /var/backups wil plaatsen dan moet ik toch in de filename /var/backups/$NEW_BACKUP.tar.gz zetten? en die $DIRS moet verwijzen naar mijn homedirectory dan om mijn home te backuppen. dus dan zou het ongeveer zou eruit moeten komen zien:
tar -cvzf /var/backups/$user-$date-backup.tar.gz $homezo zou het dan volgens mijn code en variabelen eruit moeten zien?

Een incrementele backup is iets lastiger, maar het beste is waarschijnlijk om met find de bestanden te vinden die gewijzigd zijn sinds de laatste backup en dat vervolgens toe te voegen aan de backup. Bijvoorbeeld iets van find $DIRS -mtime -3 -type f -print | tar $INCREMENTAL_BACKUP.tar.gz -T-Eventueel kun je hiervoor misschien ook de -u optie van tar gebruiken om een bestaande backup te updaten.

en bij deze wil ik dan dat het wel dezelfde naam krijgt als de oude backup alleen dat hij hem vernieuwt met nieuwe gegevens, alleen hoe moet dat precies?

Nog bedankt voor je reactie ik ben blij dat iemand mij kan / probeert te helpen.

mvg ricardo

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: Backup Script in SH script
« Reactie #3 Gepost op: 2009/11/06, 14:00:17 »
Hey,
Zelf heb ik een backup script gemaakt die ook de huidige datum in de bestandsnaam zet.
Zo kan ik snel een bestand back-uppen voordat ik het aanpas.
En het kan met een parameter gemakkelijk aangeroepen worden door bijv. een CRONJOB.

Hieronder heb je de code ervan.
#!/bin/bash

# version: 20090603
# NOTE: if the file/dir name starts with '.', this script removes the starting dot

[ "$1" == "" ] && echo -e "Usage: backup [PATH] \n[PATH] is the filename or directory to backup" &&  exit;

[ ! -e $1 ] && echo -e "$1 don't not exist" && exit;


# ${1%/} removes the last char if it's a slash
# To remove the last char (whatever it is) use ${1%?}
BACKUP=${1%/}-$(date +%Y%m%d);
BACKUP=$(echo $BACKUP | sed -e 's/^\.//')

if [ "$2" != "" ]; then  # save the backup file to the given directory ($2)
  FILENAME=$(echo $BACKUP | sed -e 's/.*\///');
BACKUP=${2%/}/$FILENAME;
fi

if [ -f $BACKUP.tar.gz ]  # When BACKUP already exists
then # Add current time to the filename
  BACKUP=$BACKUP"_"$(date +%H%M%S);   
fi

BACKUP=$BACKUP.tar.gz;
#echo "tar -zcf $BACKUP $1";
tar -zcf $BACKUP $1;

if [ "$?" != "0" ]; then
echo -e "---\ncouldn't perform the backup, see the error above.";
else
echo -e "---\nbackup of $1 stored in $BACKUP";
ls -logh $BACKUP;
fi
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: Backup Script in SH script
« Reactie #4 Gepost op: 2009/11/06, 14:04:11 »
En hdup is een tool om backups te maken.

apt-get install hdup
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!