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 :

[SHELL]extraction de chaîne


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
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut [SHELL]extraction de chaîne
    Bonjour,
    Je vais vous exposer mon problème :
    j'ai un serveur central et 5 serveurs secondaires, chaque serveur secondaires contient les données de chaque service qui y sont répertoriés
    tous les soirs je veux effectuer une sauvegarde automatisée et sécurisée des données modifiées de chacun des serveurs vers le serveur central ...

    Je travaille au préalable sur un script shell qui sera exécuté par une commande cron (de ma crontab)
    J'aimerai déjà savoir si je suis sur la bonne voie avec ce script :

    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
    #!/bin/bash
    date=`date`
    destination < ???
     
    #teste si le répertoire destination existe
    if [ ! -e "$destination" ]; then
    echo "ERREUR : La destination $destination n'a pas pu être synchronisée car le répertoire de destination n'a pas été trouvé, le $date" 2>&1 <chemin_fichier_log>
    #on passe une ligne pour espacer les redirections
    echo "" >> <chemin_fichier_log>
    exit
    fi
     
    #la variable rsync recevra le contenu du fichier <fichier_commande>
    rsync < <chemin_fichier_commande>
     
    echo "la sauvegarde de $source jusque $destination a été effectuée avec succès le $date" >> <chemin_fichier_log>
    #on passe une ligne pour espacer les redirections
    echo "" >> <chemin_fichier_log>
    Qu'en pensez-vous ?

    Maintenant, dans mon script, j'ai souligné les éléments qui me causent du soucis, j'aimerai extraire une chaine de type 'root@<ip_srv_distant1>:<chemin_destination1>' d'un fichier texte pour la mettre dans la variable $destination pour pouvoir détecter après si cette destination existe ou non

    Je ne vois pas trop quelle syntaxe utiliser après 'destination <'

    Quelqu'un pourrait m'éclaircir les idées à ce propos ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour Tipié,

    Voilà ce que j'ai compris de ton code :
    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
    #!/bin/bash
     
    date=$(date)
    destination=/chemin/ta_destination/
    log=/chemin/fichier.log
     
    #teste si $destination existe, et que c'est un répertoire
    #+ tu peux ajouter un test pour vérifier que tu as les droits d'écriture
    if [ ! -d "$destination" ]; then
    echo -e "ERREUR : La destination $destination n'a pas pu être synchronisée car le répertoire de destination n'a pas été trouvé, le $date\n" >> $log
    exit
    fi
     
    commandes=/chemin/fichier_commande
    #la variable rsync recevra le contenu du fichier <fichier_commande>
    rsync="$(<$commandes)"
     
    echo "la sauvegarde de $source jusque $destination a été effectuée avec succès le $date\n" >> $log
     
    #...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut
    j'avoue c'est une meilleure façon de voir les choses
    je débute en script shell donc j'utilise ce que je sais

    mais c'est vrai que le \n c'est comme en perl j'aurai dû y penser
    merci pour les modifications, je verrai ce que ça donne demain

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut
    merci en tout cas, et au fait c'est le bash que j'utilise d'ou #!/bin/bash

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut
    bon j'ai trouvé ce que je cherchais, je met mon script modifié :

    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
    #!/bin/bash
    date=`date`
    #la variable rsync recevra le contenu du fichier <fichier_commande>
    rsync=<chemin/fichier_commande>
    #on extrait de la commande rsync : <login@ip_srv_distant>:<chemin_destination>
    #on met des ` pour pouvoir éxécuter la commande directement
    destination=`sed -n '/^rsync/ s/.*ssh \([^ ]*\) .*/\1/p' <chemin/fichier_commande>`
    log=/chemin/fichier.log
     
    #teste si le répertoire destination existe 
    #la destination sera du type <login@ip_srv_distant>:<chemin_destination>
    if [ ! -e "$destination" ]; then
    echo -e "ERREUR : La destination $destination n'a pas pu être synchronisée car le répertoire de destination n'a pas été trouvé, le $date\n" >> $log
    exit
    fi 
     
    echo "la sauvegarde de $source jusque $destination a été effectuée avec succès le $date\n" >> <chemin_fichier_log>
    avec le scripting sed ça marche du tonnerre

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    bash ne devrait pas reconnaître des "commandes" telles que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rsync=<chemin/fichier_commande>



    bash préfère maintenant :à
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    Bonjour,

    Est ce que tu peux donner le format du fichier texte et sous quel type de shell tu es? D'une manière générale , tu peux utiliser expr pour extraire une sous chaine.
    Si ton fichier ne contient qu'une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fullpath=$(cat monfichier) 
    destination=`expr "x${fullpath}" : "x.*:\(.*\)"`

Discussions similaires

  1. Shell : Extraction d'une sous chaîne
    Par 64XAVIER64 dans le forum Linux
    Réponses: 3
    Dernier message: 14/05/2009, 19h38
  2. [Shell] Extraction chaîne caractère
    Par tonio45312 dans le forum Linux
    Réponses: 4
    Dernier message: 29/05/2008, 09h45
  3. Problème dans l'extraction de chaîne
    Par andreditdd dans le forum Langage
    Réponses: 9
    Dernier message: 11/12/2007, 09h44
  4. Shell - extraction du nom d'un fichier
    Par claralavraie dans le forum Linux
    Réponses: 2
    Dernier message: 11/01/2006, 11h59
  5. Réponses: 13
    Dernier message: 17/10/2005, 15h32

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