IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

read line


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 11
    Par défaut read line
    Bonjour,

    J'ai un problème avec le script ci dessous. Il parcourt un fichier (bases.txt) contenant des infos sur des base mysql à sauvegarder. Je parcours le fichier ligne par ligne pour récupérer les infos. Le script lit qu'une ligne du fichier et s'arrête. Le problème se situe au niveau de l'appel ssh. Quand j'enlève la commande. le fichier bases.txt est bien lut.
    Donc mes questions sont :
    Pourquoi sa fait ça ?
    Comment corriger le problème ?

    Merci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #!/bin/sh
     
    cat < bases.txt | grep -v "#" | while true
    do
            read ligne
            if [ "$ligne" = "" ]; then break; fi
            set -- $ligne
            HOST=$1
            DBNAME=$2
            USER=$3
            PASSWD=$4
            RETENTION=$5
            FILE=$6
     
            echo -n "backup base $DBNAME"
     
            # Rotate file
            for ((I=$((RETENTION-1));I>=0;I--)); do
                    if [ -f "data/${FILE}.gz.${I}" ]; then
                            mv "data/${FILE}.gz.${I}" "data/${FILE}.gz.$((I+1))"
                    fi
            done
            if [ -f "data/${FILE}" ]; then
                            gzip "data/${FILE}"
                            mv "data/${FILE}.gz" "data/${FILE}.gz.0"
            fi
            if [ -f "data/${FILE}.gz.$((RETENTION))" ]; then
                    rm -f "data/${FILE}.gz.$((RETENTION))"
            fi
     
            # Save database
            ssh $HOST "mysqldump -u${USER} -p${PASSWD} -e -q -Q --add-drop-table ${DBNAME}" > data/$FILE
            RETVAL=$?
            if [ $RETVAL -eq 0 ] ; then
                    echo -e "\t[\\033[1;32m  OK  \\033[0;39m]"
            else
                    echo -e "\t[\\033[1;31m  FAILED  \\033[0;39m]"
            fi

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 11
    Par défaut
    La solution apres 2h de galere. Si quelqu'un a l'explication du pourquoi ca marche, je prend.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #!/bin/sh
     
    cat < bases.txt | grep -v "#" | while read ligne
    do
            if [ "$ligne" = "" ]; then break; fi
            set -- $ligne
            HOST=$1
            DBNAME=$2
            USER=$3
            PASSWD=$4
            RETENTION=$5
            FILE=$6
     
            echo -n "backup base $DBNAME"
     
            # Rotate files
            for ((I=$((RETENTION-1));I>=0;I--)); do
                    if [ -f "data/${FILE}.gz.${I}" ]; then
                            mv "data/${FILE}.gz.${I}" "data/${FILE}.gz.$((I+1))"
                    fi
            done
            if [ -f "data/${FILE}" ]; then
                            gzip "data/${FILE}"
                            mv "data/${FILE}.gz" "data/${FILE}.gz.0"
            fi
            if [ -f "data/${FILE}.gz.$((RETENTION))" ]; then
                    rm -f "data/${FILE}.gz.$((RETENTION))"
            fi
     
            # Save database
            ssh $HOST "mysqldump -u${USER} -p${PASSWD} -e -q -Q --add-drop-table ${DBNAME}" 0>/dev/null >data/$FILE
            RETVAL=$?
            if [ $RETVAL -eq 0 ] ; then
                    echo -e "\t[\\033[1;32m  OK  \\033[0;39m]"
            else
                    echo -e "\t[\\033[1;31m  FAILED  \\033[0;39m]"
            fi
     
    done

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Administration] "svnadmin: Can't read length line in file"
    Par lennelei dans le forum Subversion
    Réponses: 2
    Dernier message: 07/01/2009, 13h10
  2. boucle while read line
    Par tibal dans le forum Linux
    Réponses: 0
    Dernier message: 25/09/2008, 14h44
  3. Lenteur du read line
    Par qdqdfqfdqdxcwcrzsdfw dans le forum Langage
    Réponses: 22
    Dernier message: 17/01/2007, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo