Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/04/2011, 20h39   #1
Membre habitué
 
Homme David
Étudiant
Inscription : avril 2009
Messages : 284
Détails du profil
Informations personnelles :
Nom : Homme David
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 284
Points : 134
Points : 134
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 :
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 :
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
hannibal.76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2011, 00h31   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Code :
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
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/04/2011, 11h00   #3
Membre habitué
 
Homme David
Étudiant
Inscription : avril 2009
Messages : 284
Détails du profil
Informations personnelles :
Nom : Homme David
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 284
Points : 134
Points : 134
donc en gros, le & sert a interpréter la variable ?

Je te remercie de ton aide
hannibal.76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2011, 11h17   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
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é.
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/04/2011, 11h21   #5
Membre habitué
 
Homme David
Étudiant
Inscription : avril 2009
Messages : 284
Détails du profil
Informations personnelles :
Nom : Homme David
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 284
Points : 134
Points : 134
D'accord
Par contre ta solution fonctionne juste si la variable ne contient pas de caractères spéciaux ...

exemple:
Code :
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 ?
hannibal.76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 11h34   #6
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
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 :
sed "s#mdpRootService=#&$truc#" test.sh
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/04/2011, 11h40   #7
Membre habitué
 
Homme David
Étudiant
Inscription : avril 2009
Messages : 284
Détails du profil
Informations personnelles :
Nom : Homme David
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 284
Points : 134
Points : 134
là ça fonctionne nickel

je ne savais pas que l'on pouvait utiliser d'autres délimiteurs.

Dans tous les cas, merci à toi
hannibal.76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h15.


 
 
 
 
Partenaires

Hébergement Web