Travail terminé, corrections

Dans la ligne qui suit, et qui fonctionne, ne conviendrait-il pas d’“entourer” le premier groupe (en rouge) ?

Re,

Alors, tu peux regrouper de 2 façons (mais ça n’a pas d’intérêt à mon sens) :
1 /

{ [ -e "$ddext" ] && [ -e "$ddext2" ]; } || { echo "Le DDext ne repond pas !" >&2; exit 1; }

ce qui revient exactement au même :

2 /

[ -e "$ddext" -a -e "$ddext2" ] || { echo "Le DDext ne repond pas !" >&2; exit 1; }

ce qui revient exactement au même en terme de résultat mais pas en terme de comportement.
Dans ce cas les 2 tests ( -e “$ddext” et -e “$ddext2”) sont effectués. Ce qui est inutile puisque si la 1ere condition n’est pas vraie, nul besoin de vérifier la 2nde. Dans notre cas, ça n’a pas d’importance mais on peut imaginer un cas où cela peut en avoir :

# création ou suppression du contenu du fichier "fichier"
printf "" > fichier
[ $RANDOM -eq 1 -a $(<traitement> if <condition>; then echo 2>fichier; echo 2; else echo $RANDOM>fichier; echo $RANDOM; fi) -eq 3 ] || { <traitement>; }
<traitement en fonction du contenu de fichier>

Après la condition, on pourrait effectuer un traitement en fonction du contenu de et s’attendre à ce qu’il soit vide. Mais ce ne sera jamais le cas car fichier aura toujours un contenu.

[quote=“Totor”]Re,

Alors, tu peux regrouper de 2 façons (mais ça n’a pas d’intérêt à mon sens) :
1 /

{ [ -e "$ddext" ] && [ -e "$ddext2" ]; } || { echo "Le DDext ne repond pas !" >&2; exit 1; }

ce qui revient exactement au même :

2 /

[ -e "$ddext" -a -e "$ddext2" ] || { echo "Le DDext ne repond pas !" >&2; exit 1; }

ce qui revient exactement au même en terme de résultat mais pas en terme de comportement.
Dans ce cas les 2 tests ( -e “$ddext” et -e “$ddext2”) sont effectués. Ce qui est inutile puisque si la 1ere condition n’est pas vraie, nul besoin de vérifier la 2nde. Dans notre cas, ça n’a pas d’importance mais on peut imaginer un cas où cela peut en avoir :

# création ou suppression du contenu du fichier "fichier"
printf "" > fichier
[ $RANDOM -eq 1 -a $(<traitement> if <condition>; then echo 2>fichier; echo 2; else echo $RANDOM>fichier; echo $RANDOM; fi) -eq 3 ] || { <traitement>; }
<traitement en fonction du contenu de fichier>

Après la condition, on pourrait effectuer un traitement en fonction du contenu de et s’attendre à ce qu’il soit vide. Mais ce ne sera jamais le cas car fichier aura toujours un contenu.[/quote]
Super explication :023
J’avais essayé la première solution mais j’avais omis le ‘;’

[quote]{ [ -e “$ddext” ] && [ -e “$ddext2” ][size=150];[/size] } || { echo “Le DDext ne repond pas !” >&2; exit 1; }
[/quote]

Mon point de vue, c’est le côté logique car dans ma ligne originale, on voit au même “niveau” un ‘&&’ et ensuite un ‘||’.

le second groupe est bien “délimité”, alors que le premier ne l’est pas, ça me choque.

Mais comme tu m’expliques que ça n’a pas d’intérêt, je vais laisser comme ça.

de rien…

et pourtant, il n’y a pas si longtemps:wink:

oui, je comprends

Oui pour le “il n’y a pas si longtemps” :007
Je pense que maintenant, c’est rentré.
Je suis content que tu comprennes mon "choking"
Allez, je pense avoir terminé mon script et je vais le proposer pour une dernière (?) inspection :

[code]#!/bin/bash

ddext="/dev/sdb9"
ddext2="/dev/sdb10"
autre="/mnt/autre"

[ -e “$ddext” ] && [ -e “$ddext2” ] || { echo “Le DDext ne repond pas !” >&2; exit 1; } # teste l’existence des partitions de sauvegarde
[ -e “$autre” ] || { echo “Le dossier de montage n’existe pas !” >&2; exit 1; } # teste l’existence du dossier de montage

read -p 'sauve ou sauve2 ? : ’ part # choix de la sauvegarde
if [ “$part” = sauve ]
then
sudo mount -t ext3 $ddext $autre
elif [ “$part” = sauve2 ]
then
sudo mount -t ext2 “$ddext2” "$autre"
else
echo “mauvaise entree” >&2; exit 1;
fi

echo -e "\033[4mCONTENU de la CORBEILLE\033[0m"
echo
ls ~/.local/share/Trash/files
echo
read -p "on peut la vider ? o/n : " corbeille # si la corbeille est vide ou si on ne veut pas la vider, on ne sort pas
if [ “$corbeille” = o ]
then
rm -rf ~/.local/share/Trash/*
echo -e "\033[4mCORBEILLE VIDEE\033[0m"
fi

read -p "on peut vider les dossiers de controle ? o/n : " controle # Il s’agit des 'backup-dir’
if [ “$controle” = o ]
then
sudo rm -rf /home/controle/* /home/controle/.* /home/controle-ricardo/* /home/controle-ricardo/.*
else
exit 1
fi

read -p "prêt pour la sauvegarde ? o/n : " onyva
if [ “$onyva” = o ]
then
sudo rsync -av --del --backup --backup-dir=/home/controle/ --exclude-from=/root/exclure / /mnt/autre/sauve
sudo rsync -av --del --backup --backup-dir=/home/controle-ricardo/ /home/ricardo/ /mnt/autre/sauve-ricardo
else
exit 1
fi

sudo umount “$autre”

sudo iptables-save # là, ce sont des pense-bêtes hebdomadaires qui n’ont rien à voir avec la sauvegarde
printf ‘\E[33;45m’"\n\n PENSE A DEBRANCHER LE DDext \n\n AINSI QU’A UPDATER / UPGRADER \n\n\n"; tput sgr0

exit
[/code]

Bonjour,

Tu as une variable contenant /mnt/autre/ et tu utilise le chemin dans le rsync au lieu de la variable.

Je ne suis pas fan de tes premières lignes de test ça rend les choses moins lisible, je trouve, mais ce n’est qu’un avis perso.

Tes tests, if, elif aurait été mieux remplacé par un case comme proposé par MisterFreeze et moi-même.

Aucune gestion des codes erreurs de tes commandes. Si le mount ne se fait pas, tu ne quitte pas ou tu n’informe pas par exemple.

Après, je comprend pas pourquoi tu sors si on ne supprime par le controle et sortir en erreur avec un petit message, c’est un peux mieux.

C’est clair que fasse à

die "Le DDext ne repond pas !" unless(-e $ddext and -e $ddext2);
die "Le dossier de montage n'existe pas !" unless(-d $autre);

Il n’y a pas photo.

Pourquoi tu test un dossier avec -e ricardo ?

@ Micky

Oubli de ma part car j’ai copié/collé la ligne que j’emploie habituellement et qui est dans mon “pense-bête”. Je vais réparer.

Ben ça récapitule en une seule ligne, trois lignes et je trouve que c’est tout aussi “causant”, sauf ptet la fin, indiqué par Totor.

Ben je ne vois pas du tout la simplicité entre la proposition de MisterFreez (23 lignes) :

read -p 'sauve ou sauve2 ? : ' part # quelle sauvegarde veux-tu utiliser ?
case $part in
  "sauve") # si tu choisis la première ...
    mkdir -p "$pmount"
    if [ ! -e $hdd1 ]; then
        echo "$hdd1 est introuvable"
        exit 1
    else
    sudo mount -t ext3 $hdd1 $pmount
  ;;
  "sauve2") # si tu choisis la seconde ...
    mkdir -p "$pmount"
    if [ ! -e $hdd2 ]; then
        echo "$hdd2 est introuvable"
        exit 1
    else
    sudo mount -t ext2 $hdd2 $pmount
  ;;
  *)     
    echo "mauvaise entrée"
    exit 2
  ;;
esac

ET mes “if…fi” (10 lignes)

read -p 'sauve ou sauve2 ? : ' part    # choix de la sauvegarde
   if [ "$part" = sauve ]
   then
          sudo mount -t ext3 $ddext $autre
   elif [ "$part" = sauve2 ]
   then      
      sudo mount -t ext2 "$ddext2" "$autre"
   else      
   echo "mauvaise entree" >&2; exit 1;
   fi

Et encore, j’utilise le ‘then’ sur une autre ligne, qui, si je place à la suite, réduit encore de deux lignes.
Le “case”, je l’ai souvent employé quand je faisais en Pascal mais AMA, il faut au minimum 4 choix pour qu’il soit avantageux.

Ils sont gérés puisque il sont redirigés vers la sortie standard par le ’ >&2; exit 1;
Peux-tu me donner un exemple d’information car je ne sais pas faire.
On est sûr que la partition est présente puisque testée plus haut. Donc, pour que le montage ne s’effectue pas, il faudrait que la ligne soit ‘faute’,
or je suis sûr qu’elle est bonne car je m’en sers depuis longtemps :slightly_smiling: . Je testerai quand même cette possibilité. Reste une mauvaise entrée et ça c’est prévu dans le ‘else’ :
’ echo “mauvaise entree” >&2; exit 1; ’

De crainte que la réécriture ne se fasse pas correctement. Si je ne sors pas, le processus continue et arrivé à la commande de sauvegarde proprement dite, il risque d’y avoir conflit : –backup --backup-dir=/home/controle/
Remarque bien que je n’ai pas testé et il est possible qu’il y ait surécriture ??? . Je testerai.
D’accord pour le message en plus mais indique-moi comment l’ajouter.

Cela dit, je suis toujours perméable aux idées et je ne demande qu’à être convaincu.
:006
Michel, je te réponds ce soir :006

ricardo la lisibilité ne s’évalue pas en nombre de lignes. Il y a des scripts longs plus simples que des courts (à fonctionnalité égale).

Ensuite il vaut mieux évaluer à fonctionnalité égale :

read -p 'sauve ou sauve2 ? : ' part # choix de la sauvegarde case $part in sauve) sudo mount -t ext3 "$hdd1" "$pmount" ;; sauve2) sudo mount -t ext2 "$hdd2" "$pmount" ;; *) echo "mauvaise entree" >&2; exit 1; ;; esac

read -p 'sauve ou sauve2 ? : ' part # choix de la sauvegarde if [ "$part" = sauve ] then sudo mount -t ext3 "$ddext" "$autre" elif [ "$part" = sauve2 ] then sudo mount -t ext2 "$ddext2" "$autre" else echo "mauvaise entree" >&2; exit 1; fi

12 pour moi et 10 pour toi c’est déjà moins important.
[ul]
[li]Le switch a une sémantique plus forte. On sait que tu évalue le $part et les différentes valeurs qu’il peut prendre, pas la peine de revoir à chaque if si quel est la condition évaluée.[/li]
[li]Le switch est plus maintenable si tu veut renommer $part, tu ne le fait qu’une seule fois.[/li]
[li]Je trouve le switch plus aéré (les lignes sont moins chargées).[/li][/ul]

Si tu aime le compacte, tu peut faire ainsi :

read -p 'sauve ou sauve2 ? : ' part # choix de la sauvegarde case $part in sauve) sudo mount -t ext3 "$hdd1" "$pmount" ;; sauve2) sudo mount -t ext2 "$hdd2" "$pmount" ;; *) echo "mauvaise entree" >&2; exit 1; ;; esac

Mais il n’y a aucune obligation je connais des camarades de promo qui ne s’en servent pas.

Vois le vraiment comme un style que tu donne à ton code et fais comme tu le veux. :laughing:

OK, convaincu par celui-là, mais avec mes variables franchouillardes :smiley:

@ Micky979 :
Les données sont bien écrasées dans les dossiers de contrôle, donc j’élimine la partie suivante qui n’a plus lieu d’être :

read -p "on peut vider les dossiers de controle ? o/n : " controle # Il s'agit des 'backup-dir' if [ "$controle" = o ] then sudo rm -rf /home/controle/* /home/controle/.* /home/controle-ricardo/* /home/controle-ricardo/.* else exit 1 fi

Salut,

Une ligne de commentaire en début de script spécifiant ce que ce script fait est un plus :slightly_smiling:

Oui Gérard, tu as raison mais je n’en suis pas encore à le proposer comme script-tuto, pour l’instant, je n’en suis qu’à la demande de correction.
Si par la suite, on pense que ça vaut la peine d’être proposé à d’autres, on améliorera la “communication”.
On pourra aussi y ajouter un cron, pour ceux qui aiment l’automatisation. Cela ne me concerne pas car j’aime rester maître de mes sauvegardes, quand je les décide.
:006

Re,

Le commentaire “Utilisation” n’est pas destiné aux autres mais à notre propre mémoire si souvent défaillante :laughing:

Alors si c’est ça, tu as mal lu car ils existent.
Ci-plus-bas (nouvelle locution adverbiale made by Ricardo :unamused: ), tu as les commentaires en bout de ligne, quand le texte est insuffisamment explicite.
Cette mouture est obsolète :
https://www.debian-fr.org/travail-termine-corrections-t34444-25.html#p349066
De plus, les dernières lignes viennent compléter mon “pense-bête”.
J’attends encore la réponse de Micky qui devrait me permettre d’ajouter les explications au code de sortie prématuré.

Re,

Ce ne sont pas des explications aux lignes de code mais le but des scripts que je m’attend toujours à voir dès la seconde ligne.

Dès que la correction sera finit l’explication sera pondue je suppose pour le proposer à qui en à besoin :033

Re,

Nous n’avons pas les mêmes valeurs, moi c’est la première ligne que j’écris ! Elle est destinée à m’éclaircir les idées en me fixant clairement l’objectif à atteindre. Comme une sorte de résumé de l’analyse :laughing:

Oui, je comprends, comme une première ligne de tuto

[quote]#Sauvegarde périodique de sa machine sur un DDext, après :
[ul]# vérification de l’existence de la partition de réception (ici = deux partitions différentes pour deux sauvegardes hebdomadaires alternées)

vérification de l’existence du dossier de montage

choix de la partition de sauvegarde et montage de celle-ci

vidage ou non de la corbeille, selon choix

sauvegarde proprement dite, avec mise en réserve des fichiers remplacés

démontage du dossier de montage

[/ul][/quote]
Ce qui suit est déjà expliqué dans le tuto que j’avais fait et qu’il me faudra reprendre et mettre à jour
https://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html

[quote]# Avant la première exploitation de ce script, il faudra créer :
[ul]# un dossier /mnt/votre_dossier_de_montage (ici = ‘autre’)

un ou deux dossier(s) de “backup” (ici = ‘controle’ et ‘controle-ricardo’)

un dossier d’exclusion des fichiers/dossiers à ne pas sauvegarder (ici = ‘exclure’)

Et, il faudra, bien évidemment, avoir à disposition un DDext contenant une partition de capacité suffisante pour recevoir la sauvegarde[/ul][/quote]

C’est assez clair comme ça, Chef ? :mrgreen:

Partie “corbeille” :
J’ai rajouté un test car en cas de corbeille vide, il ne trouve pas le dossier ‘files’", ce qui est logique.
Les tests sont bons mais est-ce que là aussi il faut préférer un “case” ?

echo -e "\033[4mCONTENU de la CORBEILLE\033[0m" if [ -e ~/.local/share/Trash/files ] # teste si la corbeille est pleine then ls ~/.local/share/Trash/files # liste les fichiers qu'elle contient read -p "on peut la vider ? o/* : " corbeille if [ "$corbeille" = o ] then rm -rf ~/.local/share/Trash/* echo -e "\033[4mCORBEILLE VIDEE\033[0m" fi else echo "La corbeille est vide" fi

Bien sûr, ça sera ajouté au tuto.