2013-03-07 1 views
0

J'ai créé un script shell comme celui-ci, mais j'obtiens une erreur de syntaxe dans la commande grant. Est-ce que quelqu'un peut m'aider, s'il vous plaît?Caractère d'échappement avec double qoutes dans l'échappement charcter avec double qoutes dans le script shell

ssh -t [email protected] ' 
su root -c " 
    echo \"Give db name :\"; 
    read db_name; 
    echo \"Give password :\"; 
    read db_pass; 
    host=localhost; 
    sql1=\"create database \$db_name;\"; 
    sql2=\"grant all on \${db_name}.* to \${db_name}@\${host} identified by \"\${db_pass}\";\"; 
    sql3=\"\${sql1}\${sql2}\"; 
    echo \"==============\"; 
    mysql -u root -p -e \"\${sql3}\"; 
"; 
' 
+0

Vous donnez 'GRANTS' sur les objets DB à un' utilisateur' spécifique, et non à un nom de base de données! Modifiez votre instruction comme ceci 'sql2 = \" accordez tout sur \ $ {nom_bdd}. * À \ $ {nom_utilisateur} @ \ $ {hôte} identifié par \ "\ $ {db_pass} \"; \ ";' – Incognito

+0

MYSql créera automatiquement un utilisateur mysql avec le nom d'utilisateur tout ce qu'on nous donnera. Ici nom_bd est une variable qui contient une valeur de chaîne et mysql créera un utilisateur mysql avec un nom d'utilisateur identique à nom_bd. – user103134

+0

Ici, je pense que le problème est avec le caractère \ "avant et après \ $ db_pass dans la commande grant – user103134

Répondre

0

J'ai trouvé une solution.

En mettant "\\\"" avant et après \${db_pass} dans la commande grant, j'ai résolu le problème. La commande grant a bien fonctionné sans aucune erreur de syntaxe!

Merci à tous pour votre soutien.

ssh -t [email protected] ' 
su root -c " 
    echo \"Give db name :\"; 
    read db_name; 
    echo \"Give password :\"; 
    read db_pass; 
    host=localhost; 
    sql1=\"create database \$db_name;\"; 
    sql2=\"grant all on \${db_name}.* to \${db_name}@\${host} identified by "\\\""\${db_pass}"\\\"";\"; 
    sql3=\"\${sql1}\${sql2}\"; 
    echo \"==============\"; 
    mysql -u root -p -e \"\${sql3}\"; 
"; 
' 
Questions connexes