Produktiva Per är sysadmin på ett mindre företag, och han behöver vår hjälp. Han har tidigare fått göra 
backup manuellt. Vi har då skapat ett script som gör detta åt honom, det enda han behöver göra är att skriva in alla
filer/mappar i en textfil så vårat script vet vad det skall spara.
Vårat script kommer lägga alla filer och mappar i en temp-mapp tillsammans med en logg-fil
sedan så skall denna mapp läggas i en .tar.bz med datumet i namnet.

Nedan ligger det script Per skall använda.

#!/bin/bash fname="./files.txt" if [ -f $fname ]; then current_date=`date +"%d%m%Y"` `mkdir ./backup_files_$current_date/` `touch ./backup_files_$current_date/log_$current_date.txt` logfile="./backup_files_$current_date/log_$current_date.txt" exec<$fname while read line do if [ -f $line ]; then `cp $line ./backup_files_$current_date/` echo "File $line was succesfully moved." >> $logfile elif [ -d $line ]; then `cp -r $line ./backup_files_$current_date/` echo "Directory $line was succesfully moved." >> $logfile else echo "$line could not be found." >> $logfile fi done tar -zcf backup_files_$current_date.tar.gz backup_files_$current_date/ `rm -r ./backup_files_$current_date/` echo "Backup archive backup_files_$current_date.tar.gz has been successfully created." else echo "$fname could not be found. Please create a file by the name of files.txt and try again. Aborting..." fi


Här är scriptet lite mer uppdelat.

#!/bin/bash

fname="./files.txt"

Här skapar vi en variabel där vi sparar namnet på textfilen som innehåller namnen på alla filer och mappar vi skall
säkerhetskopiera. Textfilen skall som standard heta "files.txt"

if [ -f $fname ]; then

Här kollar vi om files.txt finns, om inte skall användaren få ett felmeddelande.

current_date=`date +"%d%m%Y"`

Här kör vi ett terminalkommando i Ubuntu och sparar resultatet i current_date variabeln. Formar blir dag, månad, år

`mkdir ./backup_files_$current_date`

Här skapar vi mappen vi skall lägga alla filer i temporärt.

`touch ./backup_files_$current_date/log_$current_date.txt`

Här skapar vi en loggfil, så man kan se hur det går med kopieringen av varje mapp och fil i efterhand.

logfile="./backup_files_$current_date/log_$current_date.txt"

Här sparar vi loggfilens sökväg i en variabel för smidighetens skull.

exec<$fname

Här säger vi att vi skall läsa från fname (d.v.s. files.txt)

while read line

Här går vi igenom varje rad i files.txt

do

I nedanstående if-sats kollar vi om det är en fil, en mapp eller om filen/mappen inte finns. Just de

if [ -f $line ]; then

Här kollar vi om det är en fil.

`cp $line ./backup_files_$current_date/`

Är det en fil kopieras den till den temporära backup-mappen och

echo "File $line was succesfully moved." >> $logfile

här skriver den då in i loggen att det lyckades.

elif [ -d $line ]; then

Här kollar vi om det är en mapp.

`cp -r $line ./backup_files_$current_date/`

Precis som med filen flyttas mappen till den temporära backup-mappen och

echo "Directory $line was succesfully moved." >> $logfile

detta läggs till i logg-filen.

else echo "$line could not be found." >> $logfile

Är det varken en fil eller en mapp så skrivs det att filen/mappen inte kunde hittas i loggfilen.

fi

fi säger att if-satsen slutar.

done

done säger att while-do-satsen slutar.

tar -zcf backup_files_$current_date.tar.gz backup_files_$current_date/

Här läggs backup-mappen i en .tar.gz

`rm -r ./backup_files_$current_date/`

Här tas den temporära backup-mappen bort.

echo "Backup archive backup_files_$current_date.tar.gz has been successfully created."

är skriver vi till terminalen att programmet är klart.

else

Här är felmeddelandet man får om files.txt inte finns.

echo "$fname could not be found. Please create a file by the name of files.txt and try again. Aborting..."

fi

Här säger vi att den första if-satsen är över, och därmed vårat backup-script.