我被一个与 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}\";
";
'