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 :

[QST] sed et variable


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut [QST] sed et variable
    Bonjour a tous,

    j'ai un petit souci dans l'élaboration d'un script.
    je voudrais modifier quelques lignes du script suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/bin/sh
    # $1 nom de l'utilisateur             
    # $2 mot de pass de l'utilisateur     
     
    mdpRootService=
     
    mysql -u root -p$mdpRootService -e "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2';"
    mysql -u root -p$mdpRootService -e "CREATE DATABASE IF NOT EXISTS `$1` ;"
    mysql -u root -p$mdpRootService -e "GRANT ALL PRIVILEGES ON `$1` . * TO '$1'@'localhost';"
    Donc je voudrai:

    1. remplacer mdpRootService= par mdpRootService=d'une variable
    J'ai bien essayé de faire un sed, mais la variable n'est pas interprétée ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sed "s/mdpRootService=/mdpRootService=\$mdpMysql/" fichier.sh --> pas interprété
    sed 's/mdpRootService=/mdpRootService='"$mdpMysql"'/' fichier.sh --> une erreur (sed: -e expression n°1, caractère 39: option inconnue pour `s')
    sed 's/mdpRootService=/mdpRootService='$mdpMysql'/' test.sh      --> une erreur (sed: -e expression n°1, caractère 39: option inconnue pour `s')
    2. j'ai un problème (de quote surement) pour intégrer les commandes mysql dans mon script. elle ne sont pas correctes d’après mysql....


    Savez vous comment résoudre mes deux petits problèmes ?

    Je vous remercie d'avance pour votre aide

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    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
    $ cat plop
    #!/bin/sh
    # $1 nom de l'utilisateur
    # $2 mot de pass de l'utilisateur
    
    mdpRootService=
    
    mysql -u root -p$mdpRootService -e "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2';"
    mysql -u root -p$mdpRootService -e "CREATE DATABASE IF NOT EXISTS `$1` ;"
    mysql -u root -p$mdpRootService -e "GRANT ALL PRIVILEGES ON `$1` . * TO '$1'@'localhost';"
    
    $ mdpMysql="TOTO"
    
    $ sed "s/mdpRootService=/&$mdpMysql/" plop
    #!/bin/sh
    # $1 nom de l'utilisateur
    # $2 mot de pass de l'utilisateur
    
    mdpRootService=TOTO
    
    mysql -u root -p$mdpRootService -e "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2';"
    mysql -u root -p$mdpRootService -e "CREATE DATABASE IF NOT EXISTS `$1` ;"
    mysql -u root -p$mdpRootService -e "GRANT ALL PRIVILEGES ON `$1` . * TO '$1'@'localhost';"
    
    $
    Pas de souci

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut
    donc en gros, le & sert a interpréter la variable ?

    Je te remercie de ton aide

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par hannibal.76 Voir le message
    donc en gros, le & sert a interprété la variable ?
    Non pas du tout

    Le méta-caractère "&" permet de remplacer toutes chaînes de caractères mises en correspondance par le motif (ou l'expression régulière) fourni dans la partie gauche de la substitution ("mdpRootService=" dans ton cas).

    En gros c'est un raccourci qui désigne le motif recherché.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut
    D'accord
    Par contre ta solution fonctionne juste si la variable ne contient pas de caractères spéciaux ...

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $truc=01/01/1970
     
    sed "s/mdpRootService=/&$truc/" test.sh
    sed: -e expression n°1, caractère 25: option inconnue pour `s'
    Une solution pour contourner ce problème ?

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par hannibal.76 Voir le message
    Une solution pour contourné ce probleme ?
    Oui, changer le délimiteur par défaut (en en choisissant un qui ne soit pas dans l'expression) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s#mdpRootService=#&$truc#" test.sh

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

Discussions similaires

  1. Sed et variable
    Par lavazavio dans le forum Linux
    Réponses: 4
    Dernier message: 15/09/2011, 14h16
  2. Sed et variables
    Par danathane dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 26/05/2011, 18h21
  3. [QST] concatenation char + variable int
    Par hannibal.76 dans le forum Débuter
    Réponses: 4
    Dernier message: 02/03/2011, 19h04
  4. Substitution sed avec variables
    Par zekounnet dans le forum Linux
    Réponses: 0
    Dernier message: 29/11/2008, 13h16
  5. SED et variables.
    Par pcsystemd dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 06/05/2008, 11h42

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