在shell脚本中包含双qoutes的转义字符

在shell脚本中包含双qoutes的转义字符,shell,Shell,我创建了一个类似这样的shell脚本,但grant命令中出现语法错误。有人能帮我吗 ssh -t qbadmin@10.3.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 al

我创建了一个类似这样的shell脚本,但grant命令中出现语法错误。有人能帮我吗

ssh -t qbadmin@10.3.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}\";
 ";
'
我找到了解决办法

通过在grant命令中的
“\\\\”
前后放置
\${db\u pass}
,我解决了这个问题。grant命令运行良好,没有任何语法错误

谢谢大家的支持

ssh -t qbadmin@10.3.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}\";
 ";
'

将数据库对象上的
GRANTS
授予特定的
user
,而不是数据库名称!修改如下语句
sql2=\“grant all on\${DB\u name}.*授予由\“\${DB\u pass}”标识的\${user\u name}@${host}”\“;
MYSql将自动创建一个使用用户名的MYSql用户,不管我们得到什么。这里db_name是一个变量,它包含一个字符串值,MYSql将创建一个用户名与db_name相同的MYSql用户。我想问题出在\”grant命令中\$db_pass前后的字符。这是一个非常棘手的shell脚本。你需要处理这么多级别的命令,在正确的位置获得正确数量的反斜杠和双引号真是令人讨厌。我宁愿跑几英里来避免那样做!我的目标是在本地机器上运行shell脚本,以普通用户身份登录,然后转向根用户执行mysql命令,在服务器中,以root用户身份登录是禁用的。因此,我需要通过SSH以普通用户身份登录服务器,然后转向root用户执行mysql命令。这是我需要通过shell脚本完成的。我需要一个shell脚本,我已经创建了它并成功运行了它。