如何在外壳脚本中转义MariaDB密码的特殊字符



我怎么写一个shell脚本来登录mariadb。shell 脚本读取一个包含特殊字符(空白,!@)的密码 ini 文件。

操作系统是 Ubuntu 18.04

INI 文件如下所示:

user=xxx-xxx-xxx
password=xxx /xxx /xx/ !@

外壳脚本如下所示:

#!/bin/bash
baseDir="$(cd "$(dirname "$0")" && pwd)"
iniPath="$baseDir/backup.ini"
echo "iniPath is $iniPath"
dbUser="$(grep 'user' $iniPath | cut -d '=' -f 2)"
echo "user is $dbUser"
dbPassword="$(grep 'password' $iniPath | cut -d '=' -f 2)"
echo "password is $dbPassword"
mysql -h localhost -u $dbUser -p'$dbPassword' 

如果我按如下方式输入命令:MySQL -h localhost -u xxxxxx -p'xxx/xxx/xx/!@'在命令行中,它成功记录。但是如果我执行 shell 脚本,它总是会导致用户访问被拒绝。

有什么建议吗?谢谢。

你有没有尝试过使用: mysql -h localhost -u $dbUser -p' echo $dbPassword ' ?(特殊字符'在美国就像esc键左上角下的键盘一样,看起来像后撇号)看起来带有密码的变量在运行之前没有正确"打印"到 mysql 命令中。我建议尝试的另一种方法是使用 -p"$dbPassword"

FWIW,问题是 shell 不会将变量插值到由单引号括起来的字符串中。正如 Honza 指定的那样,双引号将起作用。

有关详细信息,请参阅 Bash 中单引号和双引号之间的区别。

最新更新