Travail terminé, corrections

Ne soyez pas trop dur avec un débutant bashiste :wink:
Les résultats sont bons mais je me servais déjà des mêmes lignes, donc elles sont “testées”.
Pour les “then” à la ligne, c’est un choix perso mais je sais qu’on peut les écrire à la suite avec ‘;’

[code]#!/bin/bash

ddext=/dev/sdb9

if [ ! -e $ddext ] # teste le branchement du DDext
then
echo "Le DDext ne répond pas"
else
read -p 'sauve ou sauve2 ? : ’ part # quelle sauvegarde veux-tu utiliser ?
if [ $part = sauve ] # si tu choisis la première …
then
sudo mount -t ext3 /dev/sdb9 /mnt/autre
elif [ $part = sauve2 ] # si tu choisis la seconde …
then
sudo mount -t ext2 /dev/sdb10 /mnt/autre
else
echo "mauvaise entree"
fi
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
if [ $corbeille = o ]
then
rm -rf ~/.local/share/Trash/*
echo -e “\033[4mCORBEILLE VIDEE\033[0m"
fi
read -p 'on peut vider les dossiers “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/.*
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
fi
sudo umount /mnt/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]

À vous pour la correction.

Là comme ça, sans même lire, je dirais qu’il faut indenter ton code (mais c’est peut-être dû au fait que tu utilises la balise ‘quote’ et non ‘code’ ?)

Sinon, en lisant, ça m’a l’air pas mal en fait…

en effet, j’m’avais gouré d’balise :blush:

Bonjour,

Tu initie une variable avec le nom ddext mais tu ne l’utilise pas pour monter ton disque.

Tu controle que le /dev/sdb9 existe mais pas le /dev/sdb10.

Malgré que le disque “ne repond pas”, tu ne quitte pas ton script.

Malgré le mauvais choix, tu ne quitte pas ton script.

Je mettrai les variables textes entre guillemets double ainsi que les tests.

Je ferai avec un case, plutot que des if successif pour le test de la valeur de part.

Tu ne teste pas que ton disque est bien monté dans /mnt/autre.

J’utiliserai plus de variable, pour que ton script puissent eventuellement être repris par d’autre.

Bonjour,

Je me suis fait la réflexion mais en toute logique, si je ne me trompe pas, c’est le même disque et il n’y a qu’un changement de partition. Donc si /dev/sdb9 est dispo ce doit être également le cas pour /dev/sdb10.

Moi j’aurais bien fais un :

avant d’essayer de monté.

Puis j’aurais mis /dev/sdb9 et /dev/sdb10 dans des variables que j’aurais réutilisé lors du montage. Comme ça si demain tu change de disque dur externe il suffiras de modifier les deux première ligne.

[quote=“Totor”]Bonjour,

Je me suis fait la réflexion mais en toute logique, si je ne me trompe pas, c’est le même disque et il n’y a qu’un changement de partition. Donc si /dev/sdb9 est dispo ce doit être également le cas pour /dev/sdb10.[/quote]
J’ai aussi pensé à le faire mais comme le dit Totor, il s’agit de tester la présence d’un DD entier, et comme les deux partoches sont sur le même DD, c’était inutile.
Au début, j’ai essayé /dev/sdb* mais y veut pas.
Autre méthode pour tester TOUT le DDext ?

[quote=“MisterFreez”]Moi j’aurais bien fais un :

avant d’essayer de monté.

[/quote]
mkdir, ça crée un dossier et il n’y a pas besoin puisqu’il existe déjà.
Je ne comprends pas bien le man :

-p, --parents créer des répertoires parent (répertoires intermédiaires) si nécessaire, sans générer d'erreur s'ils existent
Tu peux m’expliquer

C’est déjà fait (2e ligne) pour sdb9 mais il est vrai que je ne m’en sers pas partout ensuite, ça il faut que je répare.

[quote=“micky979”]Bonjour,

Tu initie une variable avec le nom ddext mais tu ne l’utilise pas pour monter ton disque.

Tu controle que le /dev/sdb9 existe mais pas le /dev/sdb10.

Malgré que le disque “ne repond pas”, tu ne quitte pas ton script.

Malgré le mauvais choix, tu ne quitte pas ton script.

Je mettrai les variables textes entre guillemets double ainsi que les tests.

Je ferai avec un case, plutot que des if successif pour le test de la valeur de part.

Tu ne teste pas que ton disque est bien monté dans /mnt/autre.

J’utiliserai plus de variable, pour que ton script puissent eventuellement être repris par d’autre.[/quote]
Je réponds à tout ça cet AM mais c’est pertinent, effectivement.

[quote=“ricardo”][quote=“MisterFreez”]Moi j’aurais bien fais un :

avant d’essayer de monté.

[/quote]
mkdir, ça crée un dossier et il n’y a pas besoin puisqu’il existe déjà.
Je ne comprends pas bien le man :

-p, --parents créer des répertoires parent (répertoires intermédiaires) si nécessaire, sans générer d'erreur s'ils existent
Tu peux m’expliquer[/quote]
Pour faire simple si tu fais :

Ça va créer le dossier /toto, puis le dossier /toto/tata.

Dans ton cas ça permet de s’assurer qu’il existe.

et si l’arborescence existe déjà, mkdir ne retourne pas d’erreur (alors qu’il le ferait sur un dossier existant sans l’option -p)

[quote=“ricardo”][quote=“Totor”]Bonjour,

Je me suis fait la réflexion mais en toute logique, si je ne me trompe pas, c’est le même disque et il n’y a qu’un changement de partition. Donc si /dev/sdb9 est dispo ce doit être également le cas pour /dev/sdb10.[/quote]
J’ai aussi pensé à le faire mais comme le dit Totor, il s’agit de tester la présence d’un DD entier, et comme les deux partoches sont sur le même DD, c’était inutile.
Au début, j’ai essayé /dev/sdb* mais y veut pas.
Autre méthode pour tester TOUT le DDext ?[/quote]
Personnellement, après ce sont des choix, je ferrais ça :

hdd1='/dev/sdb9'
hdd2='/dev/sdb10'
ptmount='/mnt/autre'

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

Ça permet de ne pas s’appuyer sur le fait que ce soit un seul et même dd, si demain tu change la modification seras plus simple.

Le switch est plus claire quand tu fais un ensemble de test sur une même variable (“si a vaut 1 action X, s’il vaut 2 action Y, etc”).

Tu peut même du coup factoriser un peu de code :

hdd1='/dev/sdb9'
hdd2='/dev/sdb10'
ptmount='/mnt/autre'

function montage {
    mkdir -p "$pmount"
    if [ ! -e $1 ]; then
        echo "$1 est introuvable"
        exit 1
    else
    sudo mount -t $2 $hdd1 $pmount
}

read -p 'sauve ou sauve2 ? : ' part # quelle sauvegarde veux-tu utiliser ?
case $part in
  "sauve") # si tu choisis la première ...
    montage $hdd1 ext3
  ;;
  "sauve2") # si tu choisis la seconde ...
    montage $hdd2 ext2
  ;;
  *)      
    echo "mauvaise entrée"
  ;;
esac

Du coup il n’y a plus de code dupliqué.
Quand tu lis le switch tout est claire (quand $part vaut “sauve” je monte $hdd1 en ext3 etc).
Si tu veut modifier la manière de monter les partitions tu n’a qu’à modifier la fonction montage.

Après c’est comme ça que moi je vois les choses, hein. Il n’y a rien d’obligatoire.

[quote=“MisterFreez”]
Ça va créer le dossier /toto, puis le dossier /toto/tata.

Dans ton cas ça permet de s’assurer qu’il existe.[/quote]
Oui, je l’avais bien compris comme ça mais mes dossiers ‘toto et tata’ sont permanents et ils existent déjà, servant à d’autres fonctions.
Ça me semble illogique de simuler une création pour s’entendre répondre que le dossier qu’on veut créer existe DÉJÀ.

Ça permet de faire de la prévention, si tu réinstalle ta machine ou si tu veut utiliser ce script pour une autre ou si, par mégarde, tu supprime le dossier tout ce passeras bien.

Pour aller dans le plus conceptuel, ton programme fonctionne à condition qu’un certain nombre d’hypothèses soient vérifiées. Il en fait parti. Si tu préfère tu peut mettre un :

ça reviens au même.

Réponses à micky979

[quote]Tu initie une variable avec le nom ddext mais tu ne l’utilise pas pour monter ton disque.
[/quote]Tu as raison, c’est parce que je n’ai fait que recopier les lignes que j’emploie habituellement, “au détail”. Je vais rectifier.

[quote]Tu controle que le /dev/sdb9 existe mais pas le /dev/sdb10.[/quote]déjà répondu plus haut mais là aussi, je vais modifier.

[quote]Malgré que le disque “ne repond pas”, tu ne quitte pas ton script.[/quote]En effet, c’est un oubli, je vais réparer.

[quote]Malgré le mauvais choix, tu ne quitte pas ton script.[/quote]idem dessus.

[quote]Je mettrai les variables textes entre guillemets double ainsi que les tests.
[/quote]peux-tu me donner un exemple et la raison du mieux que ça apporte ?

[quote]Je ferai avec un case, plutot que des if successif pour le test de la valeur de part.
[/quote]J’y avais pensé mais en fait, ça ne rends pas tellement le script plus clair, il me semble. Je vais néanmoins essayer et comparer.

[quote]Tu ne teste pas que ton disque est bien monté dans /mnt/autre.[/quote]Ben c’est un peu un test à l’envers car s’il n’est pas monté, j’aurais la réponse “mauvaise entrée”, non ? Si tu penses qu’un test supplémentaire est nécessaire, vas-y, envoie !

if [ $part = sauve ] # si tu choisis la première ... then sudo mount -t ext3 /dev/sdb9 /mnt/autre elif [ $part = sauve2 ] # si tu choisis la seconde ... then sudo mount -t ext2 /dev/sdb10 /mnt/autre else echo "mauvaise entree"

[quote]J’utiliserai plus de variable, pour que ton script puissent eventuellement être repris par d’autre.[/quote]Oui, d’autres ont aussi appuyé sur ça et je vais faire.

Merci pour ces corrections :006
Il ya 20 ans que je ne programme plus et je n’ai jamais fait en bash (Basic, GFA, Pascal et C)

peux-tu me donner un exemple et la raison du mieux que ça apporte ?[/quote]
Le shell va d’abord remplacer la variable par son contenu puis évaluer. Donc si la variable contient des espaces ou d’autres caractères qui ont un sens pour le shell il va les évaluer.

[quote=“MisterFreez”]Ça permet de faire de la prévention, si tu réinstalle ta machine ou si tu veut utiliser ce script pour une autre ou si, par mégarde, tu supprime le dossier tout ce passeras bien.

Pour aller dans le plus conceptuel, ton programme fonctionne à condition qu’un certain nombre d’hypothèses soient vérifiées. Il en fait parti. Si tu préfère tu peut mettre un :

ça reviens au même.[/quote]
J’ai rajouté après chaque ligne de montage

[quote]sudo mount -t ext2 /dev/sdb10 /mnt/autre
[ -d ‘/mnt/autre’ ] || echo “Le dossier de montage n’existe pas !”[/quote]
Par exemple, je ne sais comment remplacer la première ligne pour substituer le “/mnt/autre” par sa variable déclarée en tête du script : ddext=/dev/sdb9

[quote=“ricardo”][quote=“MisterFreez”]Ça permet de faire de la prévention, si tu réinstalle ta machine ou si tu veut utiliser ce script pour une autre ou si, par mégarde, tu supprime le dossier tout ce passeras bien.

Pour aller dans le plus conceptuel, ton programme fonctionne à condition qu’un certain nombre d’hypothèses soient vérifiées. Il en fait parti. Si tu préfère tu peut mettre un :

ça reviens au même.[/quote]
J’ai rajouté après chaque ligne de montage[/quote]
Ça devrait être avant.

[quote=“ricardo”]
[ -d ‘/mnt/autre’ ] || echo “Le dossier de montage n’existe pas !”[/quote]
Par exemple, je ne sais comment remplacer la première ligne pour substituer le “/mnt/autre” par sa variable déclarée en tête du script : ddext=/dev/sdb9[/quote]

si tu as écris :

device='/dev/sdb10' dir='/mnt/autre'

Bon, rien que pour la phase suivante, est-ce que c’est bon ?

[code]ddext=’/dev/sdb9’
ddext2=’/dev/sdb10’
autre=’/mnt/autre’

if [ ! -e $ddext ]
then
echo "Le DDext ne répond pas"
else
read -p 'sauve ou sauve2 ? : ’ part
if [ $part = sauve ]
then
[ -d $autre ] || echo "Le dossier de montage n’existe pas !"
sudo mount -t ext3 $ddext $autre
elif [ $part = sauve2 ]
then
[ -d $autre ] || echo "Le dossier de montage n’existe pas !"
sudo mount -t ext2 $ddext2 $autre
else
echo "mauvaise entree"
fi
fi[/code]