我怎么写一个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 中单引号和双引号之间的区别。