# 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:** 7

<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:58 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/121 "2016-02-21T02:58:24Z")

</div>

[quote=“ricardo”]  
Là, je pense que c’est le ‘-q’ qui permet de sortir 0, sinon, ça devrait être 1, non ?[/quote]  
nop !  
le l’option -q permet d’être silencieux (“q” pour “quiet” je suppose) !  
la valeur retournée dépend de l’existence du motif : si grep trouve le motif à chercher, il a pour statut 0. Si ne le trouve pas, son statut vaut 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:58 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/122 "2016-02-21T02:58:32Z")

</div>

Je ne comprends pas l’utilité de ‘exit 1’ dans la fonction "test\_montage\_partition()"  
J’ai changé le ‘echo’ par un ‘printf’ avec la variable de la partition 😃  
Dans la commande de démontage, à la fin, je n’ai pas mis de ‘else’, pensant qu’il était inutile ???

EDIT :  
La mouture suivante est rectifiée en tenant compte des dernières corrections au 01/08 - 11:52

[code]#!/bin/bash

### BEGIN INIT INFO

# Nom du script : sauvegarde

# Auteur : Ricardo, aidé de l’équipe de ‘[debian-fr.org](http://debian-fr.org)’

# Date de création : juillet 2011

# Utilité : faciliter les sauvegardes

# Version : cette version est écrite pour l’utilisation avec deux partitions de sauvegarde, à alterner dans le temps.

#+ Il est souhaitable que ces partitions soient sur un DD différent de celui qui abrite le système

# Pre-requis : voir tuto = [http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html](http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html)

# Description : script permettant d’effectuer, régulièrement et de façon simple, les sauvegardes de son système

# Droits : entièrement libres mais en cas de copie, la citation de “[debian-fr.org](http://debian-fr.org)” nous serait agréable

# Modifié le :

# Objet de la modification :

### END INIT INFO

function test\_montage\_partition()  
{

# Teste si la partition qui recevra la sauvegarde n’est pas déjà montée.

# $1 = type de système de fichier

# $2 = partition à monter

# $3 = point de montage

```
if ! grep -q "^$2 $3 $1" /etc/mtab 
then
	sudo mount -t "$1" "$2" "$3" || exit 1;
	return 0
else
	printf "Info : La partition %s est déjà montée\n" "$2"
	return 1
fi

```

}

function test\_sauvegarde()  
{

# Teste si la sauvegarde a abouti (premier paramètre = 0), sinon, on sort.

```
if (("$1" > 0))
then
	printf "\nErreur lors de la sauvegarde de %s\n" "$2" >&2
	exit 1
else
	printf "\nSauvegarde de %s : OK\n" "$2"
fi

```

}

#-----------------Variables-------------------  
ddext="/dev/sdb9"  
ddext2="/dev/sdb10"  
mount\_rep="/mnt/autre"  
systeme\_fich=“ext3"  
systeme\_fich2=“ext2"  
controle=”/home/controle"  
controle\_user=”/home/controle-ricardo"  
exclure="/root/exclure"  
exclure\_user="/home/ricardo/.exclure"  
sauve="/mnt/autre/sauve"  
sauve\_user="/mnt/autre/sauve-ricardo"  
#---------------------------------------------

# Teste l’existence des partitions de sauvegarde et celle du dossier de montage, sinon, on sort avec erreur 1.

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

mkdir -p "$mount_rep" || { echo "Le dossier de montage n'existe pas !" >&2; exit 1; }	

```

# Choix de la sauvegarde. Si le montage ne s’effectue pas, on sort avec erreur 1.

deja\_montee=0  
read -p 'sauve ou sauve2 ? : ’ part  
case $part in  
sauve)  
test\_montage\_partition “$systeme\_fich” “$ddext” “$mount\_rep” || deja\_montee=1   
;;  
sauve2)  
test\_montage\_partition “$systeme\_fich2” “$ddext2” “$mount\_rep” || deja\_montee=1   
;;  
\*)  
echo “mauvaise entrée” \>&2; exit 1;  
;;  
esac

# Teste si la corbeille est pleine (pésence de fichier(s) dans … /files), si elle l’est, liste les fichiers qu’elle contient

echo -e "\033[4mCONTENU de la CORBEILLE\033[0m\n"  
if [-e ~/.local/share/Trash/files/]   
then  
ls ~/.local/share/Trash/files   
read -p "on peut la vider ? o/\* : " corbeille   
if [“$corbeille” = o]  
then  
rm -rf ~/.local/share/Trash/\*  
echo -e "\033[4mCORBEILLE VIDÉE\033[0m"  
fi  
else  
echo "La corbeille est vide"  
fi

# Test de l’état de la sauvegarde avec la fonction “test\_sauvegarde”, qui se chargera de quitter le script si celle-ci est KO

# 1er paramètre : $? = statut de la dernière commande, c.a.d le rsync

# 2nd paramètre : / puis ~/ = dossier à sauvegarder

read -p “prêt pour la sauvegarde ? o/\* : " onyva  
if [“$onyva” = o]  
then  
sudo rsync -av --del --backup --backup-dir=”$controle" --exclude-from="$exclure" / "$sauve"  
test\_sauvegarde $? /

```
  		sudo rsync -av --del --backup --backup-dir="$controle_user" --exclude-from="$exclure_user" ~/ "$sauve_user"
  		test_sauvegarde $? ~/
else
  		exit 1
fi

```

# Si la partition de sauvegarde était déjà montée lors de l’appel, on sort sans la démonter.

```
if ["$deja_montee" = 0]
then 
	sudo umount "$mount_rep"
else
	sync
fi

```

[/code]

---

<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:58 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/123 "2016-02-21T02:58:34Z")

</div>

[quote=«&nbsp;ricardo&nbsp;»]Je ne comprends pas l’utilité de ‹&nbsp;exit 1&nbsp;› dans la fonction «&nbsp;test\_montage\_partition()&nbsp;»  
[/quote]  
il a pour objectif de quitter le script si une erreur s’est produite lors du montage.

> [@ricardo](#):
>
> Dans la commande de démontage, à la fin, je n’ai pas mis de ‹&nbsp;else&nbsp;›, pensant qu’il était inutile ???

et bien si il est utile : pour lancer sync !

---

<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:58 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/124 "2016-02-21T02:58:34Z")

</div>

[quote=«&nbsp;Totor&nbsp;»][quote=«&nbsp;ricardo&nbsp;»]Je ne comprends pas l’utilité de ‹&nbsp;exit 1&nbsp;› dans la fonction «&nbsp;test\_montage\_partition()&nbsp;»  
[/quote]  
il a pour objectif de quitter le script si une erreur s’est produite lors du montage.

> [@ricardo](#):
>
> Dans la commande de démontage, à la fin, je n’ai pas mis de ‹&nbsp;else&nbsp;›, pensant qu’il était inutile ???

et bien si il est utile : pour lancer sync ![/quote]

Je l’avais oublié celui-là 😊  
Est-ce que c’est suffisant ou il faut lui ajouter quelque chose ?

`# Si la partition de sauvegarde était déjà montée lors de l'appel, on sort sans la démonter.
   if ["$deja_montee" = 0]
   then
      sudo umount "$mount_rep"
   else
      sync
   fi`

Question au sujet de ‹&nbsp;exit 1&nbsp;›  
Des fois je le vois terminé par un ‹&nbsp;;&nbsp;› et des fois, sans.  
Raison ?

---

<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:58 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/125 "2016-02-21T02:58:35Z")

</div>

le ‘;’ est facultatif sauf dans les cas suivants :

- dans un bloc { … } il faut le mettre avant l’} si l’} est précédée d’une ou plusieurs instructions.
- lorsqu’il y a au moins une instruction après le ‘;’

---

<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:58 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/126 "2016-02-21T02:58:37Z")

</div>

[quote=«&nbsp;Totor&nbsp;»]le ‹&nbsp;;&nbsp;› est facultatif sauf dans les cas suivants :

- dans un bloc { … } il faut le mettre avant l’} si l’} est précédée d’une ou plusieurs instructions.
- lorsqu’il y a au moins une instruction après le ‹&nbsp;;&nbsp;›[/quote]  
Autrement dit, si on l’ajoute systématiquement, ça ne mange pas de pain 😃

Alors, si la dernière mouture (avec l’ajout de ‹&nbsp;sync&nbsp;› à la fin) est valable, tu peux envoyer ton idée, ça me donnera le temps de réfléchir 😃  
 ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

---

<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:58 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/127 "2016-02-21T02:58:38Z")

</div>

ok alors voici :  
il existe une structure en bash permettant d’afficher des menus et d’en connaitre la réponse de l’utilisateur.

Pour la doc sur cette structure :

```auto
man bash|less +/"select name"
```

ou cette [url](http://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs).  
cette doc ne te sera probablement pas facilement compréhensible. C’est pourquoi, je te donne un exemple (que tu peux tester en ligne de commande) :

```auto
PS3="Entrer le n° du film choisi : "
select film in "Film 1" "Film 2" "Film 3" Quitter
do
 case ${REPLY} in 
   [1..3]) printf "lecture du film '%s'\n" "${film}";;
   4) echo "On sort du menu"; break;;
   *) echo "Saisie non valide !";;
 esac
done

```

A terme, l’objectif est de ne pas utiliser toute ces variables ddext, ddext2, systeme\_fich, systeme\_fich2, controle, controle\_user, exclure, exclure\_user, sauve et sauve\_user   
mais 5 tableaux contenant chacun 2 valeurs. Ainsi, tu n’auras plus à tester la valeur de “part” pour déterminer les variables à utiliser pour monter la partition et effectuer rsync. Toutes les données seront accessibles via un indice correspondant à la saisie de l’utilisateur (auquel on aura soustrait 1 car les indices de tableau commencent à 0 et non 1) via le menu généré par le “select”.

Je te laisse te documenter sur les tableaux dans le man [bash](http://www.gnu.org/software/bash/manual/bashref.html#Arrays)

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/128 "2016-02-21T02:59:06Z")

</div>

Sympa ce petit script et très ‹&nbsp;causant&nbsp;›, on en comprend bien le principe.  
Quant à l’application à mon truc, je n’ai pas encore bien assimilé mais demain, je vais faire un tour sur les tableaux et ptet que ça m’ouvrira un peu plus le neurone.  
 ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

EDIT : après un coup d’oeil succinct sur les tableaux (idem qu’en Pascal, je crois me souvenir ?),  
Les variables seraient modifiées ainsi :

`#---------------------variables------------------
mount_rep="/mnt/autre"
#-----------------------------------------------
ddext=('/dev/sdb9' '/dev/sdb10')
systeme_fich=('ext3' 'ext2')
controle=('/home/controle' '/home/controle-ricardo')
exclure=('/root/exclure' '/home/ricardo/.exclure')
sauve=('/mnt/autre/sauve' '/mnt/autre/sauve-ricardo')`  
Pour savoir si j’ai bien compris, on appellerait  
la 1ère sauvegarde : ${ddext[0]}  
le fichier d’exclusions de ~/ricardo : ${exclure[1]}  
les deux fichiers de contrôle : ${controle[\*]}  
J’ai bon ?

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/129 "2016-02-21T02:59:06Z")

</div>

Exactement !!!  
Pour le pascal, j’en ai également fait il y a 20 ans… Depuis, de nombreux langages sont venus le remplacer 😉

EDIT : le select serait pour remplacer read -p 'sauve ou sauve2 ? : ’ part  
En soit, ce n’est pas un gain de code mais ça l’est par la suite.

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/130 "2016-02-21T02:59:09Z")

</div>

À quoi correspond ce ‘PS3’ ?

---

<div class="post-metadata">

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

</div>

Je me permets…

Les PS sont les “Prompt Statement”, ci après un lien (en anglais sorry) qui explique leur emploi

==\>\>[http://www.thegeekstuff.com/2008/09/bash-shell-take-control-of-ps1-ps2-ps3-ps4-and-prompt\_command/](http://www.thegeekstuff.com/2008/09/bash-shell-take-control-of-ps1-ps2-ps3-ps4-and-prompt_command/) \<\<==

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/132 "2016-02-21T02:59:12Z")

</div>

@ M3t4Linux : merci pour le lien, assez explicatif.  
@ Totor :  
Je comprends éventuellement comment remplacer les premières lignes du ‘read -p’, mais je n’aboutis pas bien loin, et encore, si c’est bon :

`PS3="Entrez le N° de la sauvegarde choisie : "
select sauvegarde in "sauve" "sauve2" quitter
do
case {REPLY} in
	[1-2]) `

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/133 "2016-02-21T02:59:13Z")

</div>

Tu y es presque ! 😉  
la variable REPLY va permettre de faire le lien avec les tableaux (ddext et systeme\_fich):  
si REPLY = 1 alors ce sont les valeurs ayant pour indice 0 qui t’intéressent  
si REPLY = 2 alors ce sont les valeurs ayant pour indice 1 qui t’intéressent  
Donc l’indice souhaité est REPLY-1  
Souviens-toi :

[quote=“Totor”]  
Toutes les données seront accessibles via un indice correspondant à la saisie de l’utilisateur (auquel on aura soustrait 1 car les indices de tableau commencent à 0 et non 1) via le menu généré par le “select”.[/quote]  
Note : pour faire une soustraction :

```auto
((indice=REPLY-1))
```

Pour les autres valeurs de REPLY :  
si REPLY vaut 3, alors on quitte le script  
si REPLY vaut tout autre chose, c’est qu’il y a erreur de saisie

Ensuite, tu n’as plus besoin d’un “case” pour savoir quelle partition monter et le code de la fonction test\_montage\_partition pourra être réintégré dans le script car elle ne sera plus appelée à 2 endroits.

edit : il faudra également modifier le code pour intégrer les tableaux “controle”, “exclure” et “sauve”

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/134 "2016-02-21T02:59:19Z")

</div>

Je réapparais car il y a eu une coupure du Net hier en fin d’AM et retour seulement en fin de matinée.  
Je ne voyais pas en effet comment lier la fonction et le script. Bien sûr, s’il n’y a plus de fonction, ça semble plus simple mais faut encore que j’y réfléchisse, ce que je vais ten,ter de faire cet AM 😉  
@ +

EDIT :  
On déclare la partie rouge comme “tableaux” ou aussi comme “variables” ? simple question d’appellation.  
Je suppose que c’est aussi à déclarer AVANT ?  
#---------------------variables------------------  
mount\_rep="/mnt/autre"  
#-----------------------------------------------  
ddext=(’/dev/sdb9’ ‘/dev/sdb10’)  
systeme\_fich=(‘ext3’ ‘ext2’)  
controle=(’/home/controle’ ‘/home/controle-ricardo’)  
exclure=(’/root/exclure’ ‘/home/ricardo/.exclure’)  
sauve=(’/mnt/autre/sauve’ ‘/mnt/autre/sauve-ricardo’)

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/135 "2016-02-21T02:59:22Z")

</div>

les tableaux sont des variables dont la structure est particulière.  
ta déclaration est correcte mais si tu veux éviter la soustraction, tu peux procéder ainsi :

(par ex pour ddext)

```auto
ddext[1]='/dev/sdb9'
ddext[2]='/dev/sdb10'
```

ou :

```auto
ddext=('' '/dev/sdb9' '/dev/sdb10')
```

Ainsi, la valeur de REPLY donnera directement l’indice du tableau.

Note : je suis en congés vendredi soir ![:dance:](https://www.debian-fr.org/uploads/default/original/1X/c5479df83c1e5adae8782ae88416ebec2c474ae1.gif "Dance") … je ne serai donc plus dispo dès vendredi ![:snooty:](https://www.debian-fr.org/uploads/default/original/1X/7733f25880e690d75c39aa9a7c7798ed563873e1.gif "Snooty")

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/136 "2016-02-21T02:59:23Z")

</div>

[quote=«&nbsp;Totor&nbsp;»]les tableaux sont des variables dont la structure est particulière.  
ta déclaration est correcte mais si tu veux éviter la soustraction, tu peux procéder ainsi :

(par ex pour ddext)

```auto
ddext[1]='/dev/sdb9'
ddext[2]='/dev/sdb10'
```

ou :

```auto
ddext=('' '/dev/sdb9' '/dev/sdb10')
```

Ainsi, la valeur de REPLY donnera directement l’indice du tableau.

Note : je suis en congés vendredi soir ![:dance:](https://www.debian-fr.org/uploads/default/original/1X/c5479df83c1e5adae8782ae88416ebec2c474ae1.gif "Dance") … je ne serai donc plus dispo dès vendredi ![:snooty:](https://www.debian-fr.org/uploads/default/original/1X/7733f25880e690d75c39aa9a7c7798ed563873e1.gif "Snooty")[/quote]  
Je préfère la seconde méthode, qui est plus sympa 😃  
J’avais pensé à la première pour éviter la soustraction mais je me suis dit que ça faisait autant de lignes de déclaration qu’avant. Par contre, je découvre la seconde ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

OK pour tes congés, on va essayer de pédaler plus vite mais ça «&nbsp;monte&nbsp;» ![:005](https://www.debian-fr.org/uploads/default/original/1X/cdd45e7dd754015ac5291329b843a2851a0d4fe8.gif "chaud")

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/137 "2016-02-21T02:59:24Z")

</div>

Alors, avant que je continue, je te soumets ce qui suit car je suis loin d’être sûr d’avoir compris 😕

`PS3="Entrez le N° de la sauvegarde choisie : "
select sauvegarde in "sauve" "sauve2" quitter
do
case ${REPLY} in
   [1-2]) #### if ! grep -q "^$2 $3 $1" /etc/mtab ###
		if ! grep -q "^${ddext[%s]} "$mount_rep" ${systeme_fich[%s]}" "${sauvegarde}" /etc/mtab
		;;
		then ............... à partir de là, on verra la suite après .............
		sudo mount -t 
		return 0
`  
2e ligne remplace 1ère

EDIT :  
Compte tenu des modifs ainsi :

[code]mount\_rep="/mnt/autre"

# la première donnée, vide, figure le [0], de façon à commencer par [1]

ddext=(’’ ‘/dev/sdb9’ ‘/dev/sdb10’)  
systeme\_fich=(’’ ‘ext3’ ‘ext2’)  
controle=(’’ ‘/home/controle’ ‘/home/controle-ricardo’)  
exclure=(’’ ‘/root/exclure’ ‘/home/ricardo/.exclure’)  
sauve=(’’ ‘/mnt/autre/sauve’ ‘/mnt/autre/sauve-ricardo’)[/code]

Là, mon fusible, il en est presque à la rupture ![:005](https://www.debian-fr.org/uploads/default/original/1X/cdd45e7dd754015ac5291329b843a2851a0d4fe8.gif "chaud")

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/138 "2016-02-21T02:59:26Z")

</div>

J’ai réussi à faire avec une seule partition mais pas trouvé le moyen du choix. Ce qui suit fonctionne pour la partition 1 = ‘sauve’

[code]mount\_rep="/mnt/autre"

# la première donnée, vide, figure le [0], de façon à commencer par [1]

ddext=(’’ ‘/dev/sdb9’ ‘/dev/sdb10’)  
systeme\_fich=(’’ ‘ext3’ ‘ext2’)  
controle=(’’ ‘/home/controle’ ‘/home/controle-ricardo’)  
exclure=(’’ ‘/root/exclure’ ‘/home/ricardo/.exclure’)  
sauve=(’’ ‘/mnt/autre/sauve’ ‘/mnt/autre/sauve-ricardo’)

PS3=“Entrez le N° de la sauvegarde choisie : “  
select sauvegarde in “sauve” “sauve2” quitter  
do  
case ${REPLY} in  
[1-2]) if ! grep -q “^${ddext[1]} “$mount\_rep” ${systeme\_fich[1]}” /etc/mtab  
then  
sudo mount -t “${systeme\_fich[1]}” “${ddext[1]}” “$mount\_rep” || exit 1;  
break  
else  
printf “Info : La partition ${ddext[1]} est déjà montée\n” #”${ddext[%s]}” "${sauvegarde}"  
break  
fi  
;;  
3) echo “On sort du menu”; break;;  
\*) echo “Saisie non valide !”;;  
esac  
done  
echo ‘OK’   
[/code]

Ce qui me manque, c’est l’équivalent du '%s’  
Ou que les [1-2] soient “variabilisées”

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/139 "2016-02-21T02:59:26Z")

</div>

Il faut faire ainsi :

`PS3="Entrez le N° de la sauvegarde choisie : "
select sauvegarde in "sauve" "sauve2" quitter
do
case ${REPLY} in
   [1-2])
      index=${REPLY}
   ;;
   *)
      echo 'Erreur de saisi'
      exit 1
   ;;
esac
if ! grep -q "^${ddext[$index]} $mount_rep ${systeme_fich[$index]}" "${sauvegarde}" /etc/mtab`

REPLY contiens la bonne valeur (tu la test quand tu fais case ${REPLY}), mais il vaut mieux la sauvegarder dans une autre variable pour ne pas qu’elle soit écrasée par un autre appel à read.

---

<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:59 UTC](https://www.debian-fr.org/t/travail-termine-corrections/33195/140 "2016-02-21T02:59:27Z")

</div>

Ok merci Michel, c’est ce que j’avais envisagé : une variable. Par contre, je n’aurais jamais su où la placer.  
Je teste tout ça ce soir.  
 ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

[Page précédente](https://www.debian-fr.org/t/travail-termine-corrections/33195.md?page=6)

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