# Tests en bash et $?

**URL:** <https://www.debian-fr.org/t/tests-en-bash-et/77661>\
**Category:** Programmation\
**Tags:** bash\
**Created:** [Octobre 1, 2018, 1:44 UTC](https://www.debian-fr.org/t/tests-en-bash-et/77661 "2018-10-01T13:44:52Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![rsuinux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/rsuinux/32/4554_2.png) [@rsuinux](https://www.debian-fr.org/u/rsuinux)\
**Post date:** [Octobre 1, 2018, 1:44 UTC](https://www.debian-fr.org/t/tests-en-bash-et/77661/1 "2018-10-01T13:44:52Z")

</div>

Bonjour à tous,  
J’ai un petit souci de compréhension. Ce n’est pas vital (quoi que) mais j’aimerai au moins comprendre.  
Le contexte: je fais un petit script pour synchroniser quelques répertoire sur un disque externe. Avant de lancer rsync, je teste si /mnt est utilisé et le démonte si besoin. C’est le début, ça coince la (le reste fonctionne):

```
#!/bin/bash
set -x 
POINT_MONTAGE="/mnt"
EXCLUDE="/root/Excludes-Rsync.txt"
RSYNC="/usr/bin/rsync"

mount | grep -q $POINT_MONTAGE
if [$? = 0]
then
    echo " point de montage $POINT_MONTAGE en cours d'utilisation. De-mountage en cours..."
    sync
    umount $POINT_MONTAGE > /dev/null 2>&1
    if [$? != 0]
    then
            echo " erreur sur de-mountage ... EXIT!"
            exit 1
    fi
fi

echo "pas d'erreur"

```

J’ai pas du tout comprendre,: si j’ai /mnt d’utilisé, ca marche, si /mnt est libre, je n’arrive pas à “pas d’erreur” , le script s’arrête au premier “mount | grep $POINT\_MONTAGE”  
Et je n’ai aucun message d’erreur!

```
# ./Sauvegarde_test_0.sh
+ POINT_MONTAGE=/mnt
+ EXCLUDE=/etc/Excludes-Rsync.txt
+ RSYNC=/usr/bin/rsync
+ grep -q /mnt
+ mount

```

Si vous pouviez me donner votre avis, s’il vous plaît.  
Merci.  
Rémi.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Octobre 1, 2018, 2:20 UTC](https://www.debian-fr.org/t/tests-en-bash-et/77661/2 "2018-10-01T14:20:08Z")

</div>

Bonjour **rsuinux**

Je te propose d’utiliser le script suivant :

```nohighlight
#!/bin/bash
set -x 
POINT_MONTAGE="/mnt"
EXCLUDE="/root/Excludes-Rsync.txt"
RSYNC="/usr/bin/rsync"

if ["$(stat --format='%m' $POINT_MONTAGE)" = "$POINT_MONTAGE"]
then
    echo " point de montage $POINT_MONTAGE en cours d'utilisation. De-mountage en cours..."
    sync
    umount $POINT_MONTAGE > /dev/null 2>&1
    if [$? != 0]
    then
            echo " erreur sur de-mountage ... EXIT!"
            exit 1
    fi
fi

echo "pas d'erreur"

```

Si **/mnt** n’est pas utilisé comme un point de montage,  
c’est que **/mnt** est un sous-répertoire de la racine du système de fichiers  
et dans ce cas, la commande

```auto
stat --format='%m' /mnt

```

retournera le nom du point de montage utilisé par  
la racine du système de fichiers dans lequel se trouve le sous-répertoire **/mnt** =\> **/**

=======  
Mais si **/mnt** est utilisé comme un point de montage,  
cette même ligne de commande  
retournera le nom du point de montage utilisé par  
la racine du système de fichiers qui est monté sur le point de montage **/mnt** =\> **/mnt**

---

<div class="post-metadata">

**Author:** ![rsuinux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/rsuinux/32/4554_2.png) [@rsuinux](https://www.debian-fr.org/u/rsuinux)\
**Post date:** [Octobre 1, 2018, 3:21 UTC](https://www.debian-fr.org/t/tests-en-bash-et/77661/3 "2018-10-01T15:21:26Z")

</div>

@anon29980398  
Merci pour ta réponse rapide.  
Je viens de tester. L’idée est très bonne, et ça marche (quand je me gourre pas dans le script).  
Ca c’est fait et je te remercie beaucoup.  
Mais ce qui est marrant, c’est que j’ai mis le test, avec stat, mais la première fois, j’ai oublié d’enlever “mount | grep $POINT\_MONTAGE” Et mon script c’est arreté net.  
Je ne comprend pas pourquoi.

C’est pas grave. Ca marche, je vais pouvoir avancer.

Rémi.
