N-PN White-Hat Project
[Bash] Script de Backup - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Informatique (https://dev.n-pn.fr/forum/forumdisplay.php?fid=12)
+--- Forum : Logiciel (https://dev.n-pn.fr/forum/forumdisplay.php?fid=35)
+--- Sujet : [Bash] Script de Backup (/showthread.php?tid=2947)



[Bash] Script de Backup - Edelwin - 23-04-2013

Plopatouss o/

Pour ma première contribution à ce forum, je voudrais partager avec vous un script qui me sert énormément : un script de backup pour ma clé USB.
Il se compose en deux parties :
  • La partie cause (cause.sh) qui servira pour le fichier de logs
  • La partie SLAANESH_backup.sh qui enclenche le script de backup en lui-même
On lance SLAANESH_backup.sh en premier (revu et corrigé par de nombreux contributeurs tels que gruik et notfound)
Code :
#!/bin/bash

echo -e "Veuillez entrer la cause de ce backup : \n"
echo "Backup de routine     (1)"
echo "Veille d'un départ    (2)"
echo "Changement de support (3)"

while true; do
         read -p "Cause : " choix
         case $choix in
                '1')
                        cause="Backup de routine effectué"
                        break ;;
                '2')
                        cause="Veille d'un départ"
                        break ;;
                '3')
                         cause="Changement de support"
                         break ;;
                 *)
                         echo "Veuillez taper un choix correct après avoir relancé le programme" ;;
        esac
done
  
la_date=$(date "+%Y/%m/%d_%H:%M")
echo "$cause le $la_date" >> logs.txt
echo "$cause le $la_date" >> backup_SLAANESH/logs.txt
exit 0

et .SLAANESH_backup.sh

Code :
#!/bin/bash
#SLAANESH_BACKUP.sh
# Comme je suppose que votre disque dur/clé USB ne s'appelle pas SLAANESH, vous pouvez remplacer aisément toutes les occurences de ce mot dans VIM en
# tapant :%s/SLAANESH/Nom_de_votre_support
# On appelle le module de sélection de cause situé dans le même répertoire
./cause.sh &&
# Test de détection du dossier de backup. Le dossier créé sera à la racine (~)
[ -d ~/backup_SLAANESH ] || mkdir ~/backup_SLAANESH
# La commande rsync est lancée avec son panel d'options ||
rsync -aorzi  --verbose --stats --progress /media/SLAANESH/ ~/backup_SLAANESH &&
clear ;
echo "backup réalisé. Revenez nous voir ;)"

un exemple de ligne de fichier de logs
Code :
Backup de routine effectué le  10/04/2013

Corrigez-moi, Critiquez-moi, je ne demande que ça !


RE: [Bash] Script de Backup - gruik - 24-04-2013




RE: [Bash] Script de Backup - thxer - 24-04-2013

Très instructif


RE: [Bash] Script de Backup - Edelwin - 24-04-2013

Pour ce qui est du scindage, c'est juste pour être décentralisé et pouvoir caser un appel de script dans le script (scriptception!).
Ta dernière ligne était de base implémentée dans la partie rsync, mais il m'arrivait d'avoir des erreurs de de rsync, et un message positif :/
Et je.ne compte pas le mettre en cronjob, car je navigue entre des ordis qui ne sont pas à moi (genre le G5 Familial) et je ne pourrais pas toujours être là à temps pour brancher la clé.


RE: [Bash] Script de Backup - notfound - 24-04-2013

o/

Déjà, merci pour le partage ! C'est une bonne idée de script Wink
Par contre, il y a quelques défauts mais on va les corriger ensemble.

################################################################################

Tout d'abord, j'ai pas compris cette ligne :
Code BASH :

echo "Veuillez entrer la cause de ce backup :"\n
 


Si tu veux sauter une ligne avec le \n ça ne marchera pas si tu le mets ici !

Code BASH :

# Fonctionnant avec #!/bin/bash
echo -e "Veuillez entrer la cause de ce backup : \n"

# Fonctionnant avec #!/bin/sh
echo "Veuillez entrer la cause de ce backup : \n"
 


###############################################################################

Ensuite, tu as :
Code BASH :

echo -n "cause : "
read choix
 


Que tu peux remplacer par :

Code BASH :
read -p "Cause : " choix


################################################################################

Pour le nom du fichier en fonction de la date

Code BASH :
la_date=$(date +%d/%m/%Y)


Si jamais tu fais 2 backup dans la même journée, ça écrase tout donc c'est pas forcément bien ... Sauf si t'es sûr. Mais bon tu peux préciser avec l'heure :

Code BASH :
la_date=$(date "+%Y/%m/%d_%H:%M")



################################################################################


Pour finir, je vois 2 choses génantes :
- L'utilisation de trop de IF --> CASE ... IN
- Si un user ne mets pas 1, 2 ou 3 tu quittes ton programme, il faut donc le relancer ce qui n'est pas très élégant en soit


Voici mon code corrigé pour SLAANESH_backup.sh :

Code BASH :

#!/bin/bash

echo -e "Veuillez entrer la cause de ce backup : \n"
echo "Backup de routine     (1)"
echo "Veille d'un départ    (2)"
echo "Changement de support (3)"

while true; do
    read -p "Cause : " choix
    case $choix in
        '1')
            cause="Backup de routine effectué"
            break ;;
        '2')
            cause="Veille d'un départ"
            break ;;
        '3')
            cause="Changement de support"
            break ;;
        *)
            echo "Veuillez taper un choix correct après avoir relancé le programme" ;;
    esac
done

la_date=$(date "+%Y/%m/%d_%H:%M")
echo "$cause le $la_date" >> logs.txt
echo "$cause le $la_date" >> backup_SLAANESH/logs.txt
exit 0
 


Concernant le 2e script, tout a été dit par Gruik !

EDIT : Il serait aussi bien cool que la clé USB soit détectée automatiquement, plutôt que ce soit à l'user de changer le script Wink