0

将从我想要完成的事情开始。我编写了一个菜单脚本来添加一个新数据库并回显以筛选结果。但似乎无法让它使用变量登录。

这是我遇到问题的部分:

#!/bin/bash
while [[ "$yn" != "Yes" && "$yn" != "Y" && "$yn" != "y" && "$yn" != "yes" ]]; do
    echo "  Please, type password for root user.             #"
read -r  mysqlrp
    echo "  You have entered $mysqlrp as your MySQL password #"
    echo "  Is this correct? (Yes or No)            #"
      read yn
done
mysql -u root -p$mysqlrp

也尝试过:

mysql -u root -p${mysqlrp}

mysql -u root -p'${mysqlrp}'

我得到以下信息:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

即使当我尝试不使用脚本时也可以正常工作。

请帮助,提前谢谢,乔

4

2 回答 2

1

要直接在命令行字符串中提供密码,您应该使用mysql --password=[password]. 见这篇文章

为了提示用户输入密码,您可能应该使用类似这样的东西。

#!/bin/bash
read -p "Username: " uname
stty -echo
read -p "Password: " passw; echo
stty echo

您绝不能打印密码。并且在输入时也不应该看到它。


#!/bin/bash
read -p "Username: " uname
stty -echo
read -p "Password: " passw; echo
stty echo
mysql --user=$uname --password=$passw

该脚本对我有用。如果它不适合您,请检查您的 mysql 权限是否允许您从localhost.

于 2011-03-12T21:15:03.583 回答
0

在 shellscript 中,你可以做

set -x

查看正在执行的命令是什么样的。

你应该做 mysql --password="$mysqlrp"。'$mysqlrp' -> '$mysqlrp'。

在你的真实脚本中,我想你可能想要做

read -p "Password, plz:" -s mysqlrp

为了正确回答问题,您得到的实际错误会有所帮助。[更新:在评论中回答。]

另外,请注意,如果您的查询长时间运行,您的密码将在“ps -ef”中可见

于 2011-03-12T21:16:56.073 回答