2013-03-07 97 views
0

我已经创建了一个像这样的shell脚本,但我得到授予命令的语法错误。请有人可以帮我吗?逃脱字符与双qoutes逃脱字符在shell脚本中的双qou

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

您将数据库对象的'GRANTS'赋予特定的'user',而不是数据库名!修改您的语句,像这样'sql2 = \“授予\\ {{db_name}。*全部\\ {用户名} @ \ $ {主机} \ \ {\ {db_pass} \”; \“;' – Incognito 2013-03-07 06:18:41

+0

MYSQL会自动创建一个带有用户名的mysql用户,无论我们给出了什么。这里的db_name是可变的,它包含一个字符串值,并且mysql将创建一个与db_name相同的用户名的mysql用户。 – user103134 2013-03-07 06:26:38

+0

这里我认为问题出现在grant命令中的\ $ db_pass之前和之后的字符 – user103134 2013-03-07 06:27:54

回答

0

我找到了解决方案。

通过在授予命令\${db_pass}之前和之后放"\\\"",我解决了这个问题。 grant命令很好地工作,没有任何语法错误!

谢谢大家的支持。

ssh -t [email protected]2.0 ' 
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}\"; 
"; 
'