sh 脚本用于输入密码执行 mysql 脚本

sh 脚本用于输入密码执行 mysql 脚本

我想执行一个 mysql 脚本,要求用户从命令行动态输入密码,如果可能的话,还附带一条消息Enter your $root password。但是它不能按预期工作。到目前为止,我已经

mysql -u root -p CREATE DATABASE IF NOT EXISTS Test

此外,创建数据库时如何从 mysql 注销并返回到 bash 命令?

答案1

根据文档

mysql -u root -p --execute="SELECT User, Host FROM mysql.user"

提示输入密码,执行给定的命令,并返回到 shell(无需注销)。

如果您想要自己的提示,则需要编写脚本:

#!/usr/bin/env bash

echo "Enter pwd"
read pwd
mysql -u root -p$pwd --execute="SELECT User, Host FROM mysql.user"

-p请注意,和之间不能有空格,$pwd因为 mysql它们被视为$pwd数据库的名称。

我不建议这样做,因为密码在终端中以明文显示,而mysql -p显示星号。

答案2

编写 MySQL 查询脚本可以通过几种方式完成。PerlDuck 的回答已经涉及-e--execute参数。另一种方法是使用sourceMySQL 本身的命令来运行 SQL 脚本:

$ mysql -u root -p -e 'source foo.sql'
Enter password:
+------+-------------+
| a    | b           |
+------+-------------+
|    1 | hello world |
+------+-------------+
$ cat foo.sql
use foo_db;
SELECT * FROM foo_tb;

另一种方法是将脚本重定向mysqlstdin

$ sudo mysql -u root -p < foo.sql
Enter password:
a   b
1   hello world

注意每种情况下格式的差异。当然你也可以使用here-doc 或 herestring以实现相同的结果,尽管使用文本文件允许执行冗长的查询,但此处的文档和此处的字符串对于中等长度的语句更有用。

相关内容