shell 脚本中密码附近 grant 命令语法错误

shell 脚本中密码附近 grant 命令语法错误

我被一个与 shell 脚本有关的问题困扰着。

由于某种原因,我已经\在双引号前使用了字符("),如我的 shell 脚本的下面一行所示。

sql2=\"将\${db_name}.* 上的所有权限授予\${db_user}@\${host},标识为\${db_pass};\";

但是,就像在 MySQL“grant”命令语法中一样,我需要在 之前和之后加上双引号\${dbpass},这是我上面给出的 shell 脚本行的一部分。当我这样放置时,\"\${dbpass}\"它在执行期间会抛出语法错误。我应该如何解决这个问题。

这是我想要运行的 shell 脚本。

ssh-t命令[电子邮件保护]'
su root -c "
echo \"给出数据库名称:\";
读取 db_name;
echo \"给出密码:\";
读取 db_pass;
host=localhost;
sql1=\"创建数据库\$db_name;\";
sql2=\"将\${db_name}.* 上的所有权限授予\${db_name}@\${host},标识为\"\${db_pass}\";\";
sql3=\"\${sql1}\${sql2}\";
echo \"==============\";
mysql -u root -p -e \"\${sql3}\";
";
'

请参考此脚本并让我知道我需要做的必要更改。

谢谢。

答案1

您需要双重转义,用 将该\${db_pass}位括起来\\\"(这是 的转义序列\")。

像这样:

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}\";
";
'

相关内容