# Travail terminé, corrections

**URL:** <https://www.debian-fr.org/t/travail-termine-corrections/33195>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195 "2016-02-21T02:54:53Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/1 "2016-02-21T02:54:53Z")

</div>

Ne soyez pas trop dur avec un débutant bashiste 😉  
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.

---

<div class="post-metadata">

**Author:** ![kna](https://www.debian-fr.org/user_avatar/www.debian-fr.org/kna/32/5623_2.png) [@kna](https://www.debian-fr.org/u/kna)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/2 "2016-02-21T02:54:53Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/3 "2016-02-21T02:54:53Z")

</div>

en effet, j’m’avais gouré d’balise 😊

---

<div class="post-metadata">

**Author:** ![micky979](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/d9b06d/32.png) [@micky979](https://www.debian-fr.org/u/micky979)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/4 "2016-02-21T02:55:00Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/5 "2016-02-21T02:55:00Z")

</div>

Bonjour,

> [@micky979](#):
>
> Tu controle que le /dev/sdb9 existe mais pas le /dev/sdb10.

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.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/6 "2016-02-21T02:55:00Z")

</div>

Moi j’aurais bien fais un :

```auto

```

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.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/7 "2016-02-21T02:55:01Z")

</div>

[quote=«&nbsp;Totor&nbsp;»]Bonjour,

> [@micky979](#):
>
> Tu controle que le /dev/sdb9 existe mais pas le /dev/sdb10.

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 ?

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/8 "2016-02-21T02:55:01Z")

</div>

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

```auto

```

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

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/9 "2016-02-21T02:55:02Z")

</div>

> [@MisterFreez](#):
>
> 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.

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.

```auto
ddext=/dev/sdb9
```

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/10 "2016-02-21T02:55:02Z")

</div>

[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.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/11 "2016-02-21T02:55:03Z")

</div>

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

```auto

```

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 :

```auto

```

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

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

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/12 "2016-02-21T02:55:03Z")

</div>

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)

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/13 "2016-02-21T02:55:03Z")

</div>

[quote=«&nbsp;ricardo&nbsp;»][quote=«&nbsp;Totor&nbsp;»]Bonjour,

> [@micky979](#):
>
> Tu controle que le /dev/sdb9 existe mais pas le /dev/sdb10.

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 :

```auto
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 («&nbsp;si a vaut 1 action X, s’il vaut 2 action Y, etc&nbsp;»).

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

```auto
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 «&nbsp;sauve&nbsp;» 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.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/14 "2016-02-21T02:55:03Z")

</div>

[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À.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/15 "2016-02-21T02:55:04Z")

</div>

Ç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 :

```auto

```

ça reviens au même.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/16 "2016-02-21T02:55:04Z")

</div>

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, «&nbsp;au détail&nbsp;». 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 «&nbsp;ne repond pas&nbsp;», 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 «&nbsp;mauvaise entrée&nbsp;», 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](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")  
Il ya 20 ans que je ne programme plus et je n’ai jamais fait en bash (Basic, GFA, Pascal et C)

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/17 "2016-02-21T02:55:05Z")

</div>

> [@](#):
>
> [quote]Je mettrai les variables textes entre guillemets double ainsi que les tests.

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.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/18 "2016-02-21T02:55:05Z")

</div>

[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 :

```auto

```

ç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

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/19 "2016-02-21T02:55:05Z")

</div>

[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 :

```auto

```

ç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]

```auto

```

si tu as écris :

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

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:55 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/20 "2016-02-21T02:55:06Z")

</div>

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]

[Page suivante](https://www.debian-fr.org/t/travail-termine-corrections/33195.md?page=2)
