我使用以下代码作为更大脚本的一部分:
mysql -u root -p << MYSQL
create user '${DOMAIN}'@'localhost' identified by '${DOMAIN}';
create database ${DOMAIN};
GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL
正如您所看到的,它创建了一个授权的、所有特权的数据库用户和一个具有相同值的数据库实例(密码也将是相同的值)。
DB user ====> ${domain}.
DB user password ====> ${domain}.
DB instance ====> ${domain}.
这是有问题的,因为我需要不同的密码。当然,我可以在整个脚本执行完成后从 `${domain} 手动更改密码,但这不是我想要的:
我想要的是在执行时直接输入/粘贴密码,交互地。
换句话说,我希望提示我输入数据库用户的密码将是运行脚本的一个组成部分。
我已经尝试过以下代码,但失败了:
mysql -u root -p << MYSQL
create user '${DOMAIN}'@'localhost' identified by -p;
create database ${DOMAIN};
GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL
通过在脚本执行中直接键入/粘贴(而不是在脚本执行后手动更改密码),能够以交互方式插入密码的正确方法是什么?
答案1
只需让用户预先存储变量read
:
echo "Please enter password for user ${domain}: "; read -s psw
mysql -u root -p << MYSQL
create user '${domain}'@'localhost' identified by '${psw}';
create database ${domain};
GRANT ALL PRIVILEGES ON ${domain}.* TO ${domain}@localhost;
MYSQL
在这里,该命令read
读取用户输入并将其存储在$psw
变量中。请注意,输入密码值后,系统将提示您输入 MySQL root 密码,以便连接到 MySQL 数据库(-p
flag = 交互式密码提示)。