Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/06/2016, à 10:25

psylo24

[Résolu] Boucle dans un script de sauvegarde

Bonjour tout le monde,

Je sollicite votre aide à ce jour car je suis en train de perfectionner un script de sauvegarde et je suis bloqué.
Contexte :
Mon script utilise une fonction getBDD qui permet de
1. vérifier si le fichier existe
2. si il existe alors je renomme (via mv) mon fichier $file (qui est égal à ty en ta) et c'est censé me renvoyer 2 mais ce n'est pas le cas.
3. Si il n'existe pas alors ça me retourne le message "ty not found" et ça me renvoie 3.

Dés que j'essaie d'exécuter ma fonction getBDD dans la boucle while ca me renomme bien ty en ta mais aprés ca ne sort part de la boucle et ça me retourne indéfiniment les lignes suivantes :

ty found.
ty found.
tttt
0
0
ty not found.
3
0
ty not found.
3
0

Donc déjà premier problème est que la ligne "status=$?" ne fonctionne pas car quand je fais un "echo $status" ça me retourne 0 au lieu de 3.

Mon besoin :
En gros je veux que mon script gère les erreurs en cas d'échec, que si mon script n'arrive pas à récupérer le fichier (si fichier inexistant ou si erreur lors du mv) ca me relance ma fonction getBDD. J'ai donc eu l'idée d'utiliser ce système de "return" de code.

#!/bin/bash
file="ty"

#!/bin/bash
file="ty"
function getBDD () {
    if [ -f "$file" ]
    then
            echo "$file found."

            mv $file ta
            error=$?
            if [ $error -ne 0 ]
             then
              echo "Erreur recuperation BDD: we have an exit code of $error"
                          return 2
            fi
            echo tttt
           return

    else
            echo "$file not found."
                        return 3
    fi
}

#getBDD
#echo The previous function has a return value of $?

status=0
#echo $status
while [ $status != 1 ]
do
       #echo $status
        sleep 3
        getBDD
        echo $?
        status=$?
        echo $status
done

Merci par avance pour votre aide :-)

Dernière modification par psylo24 (Le 01/06/2016, à 11:22)

Hors ligne

#2 Le 01/06/2016, à 11:03

pingouinux

Re : [Résolu] Boucle dans un script de sauvegarde

Bonjour,
Je n'ai pas regardé en détail, mais dans ces 2 lignes

        echo $?
        status=$?

status va être égal au code de retour du echo.
Il faut que tu fasses ceci

        status=$?
        echo $status

Hors ligne

#3 Le 01/06/2016, à 11:21

psylo24

Re : [Résolu] Boucle dans un script de sauvegarde

pingouinux a écrit :

Bonjour,
Je n'ai pas regardé en détail, mais dans ces 2 lignes

        echo $?
        status=$?

status va être égal au code de retour du echo.
Il faut que tu fasses ceci

        status=$?
        echo $status

Merci pour ta réponse mais j'ai déja essayé status=$? mais ca ne marchait pas, j'ai alors revu l'ensemble du script :

#!/bin/bash
file="ty"

function getBDD () {
#Si fichier existe
[ -f "$file" ]
#Si $? = 0 donc si fichier existe alors on continue la boucle
if [ $? == 0 ]
    then
            echo "$file trouvé"
            mv $file ta
            echo "on deplace $file vers ta"
            boucle=0
    else
            echo "$file , non trouvé , poursuite de la boucle.."
 fi
}

boucle=1
while [ "$boucle" == 1 ]; do
        getBDD
        #echo The previous function has a return value of $?
        sleep 3
done
echo "On continue le script..."

Mon probléme est résolu smile

Merci en tout cas

Hors ligne

#4 Le 01/06/2016, à 11:31

pingouinux

Re : [Résolu] Boucle dans un script de sauvegarde

De plus, tu parcourais la dernière boucle tant que [ $status != 1 ], alors qu'il ne pouvait prendre que les valeurs 0, 2 ou 3. Ça ne risquait pas de s'arrêter.

Hors ligne