从 Linux Bash 脚本检查 MySQL 数据库中的值

您可以通过从命令行连接到 MySQL 数据库并传递一个查询,使您的 bash 脚本根据 MySQL 数据库的内容以不同方式运行,您可以在 if
块中使用该查询以根据值进行分支。
注意:我们的示例显示在 MySQL 上使用 root 用户,但您可能希望在那里替换为不同的用户帐户。
从 Bash 脚本运行 SQL 查询
在 bash 脚本中运行的语法与从命令行访问数据库相同:
mysql -u root -pPassword -h hostname -D dbname -e 'query'
如果您的数据库在本地运行,您可以省略 -h
标志。如果您运行的是开发数据库,并且您的数据库没有密码,则可以省略 -p
标志。
这会将查询结果输出到 STDOUT,您可以将其通过管道传输到文件:
mysql -u root -D dbname -e 'SELECT * FROM table' > file
...或使用 $ ( )
构造存储在变量中:
variable=$(mysql -u root -D dbname -e 'SELECT * FROM table')
但是,默认情况下输出不会很漂亮,因此您可以使用 -B
标志以制表符分隔值 (TSV) 格式和 -N
标志以省略列标题。

TSV 文件是 CSV 文件的较少使用的表亲,您可以从命令行转换它。
检查特定值和分支
如果您想根据数据库中的值进行分支,您可以查询特定的行和列,并将响应存储在变量中。然后,您可以使用 bash if
块根据该变量的内容进行分支。
field=$(mysql -u root -BNe 'USE test; SELECT label FROM test WHERE id=1')
if [ $field == 'TEST' ]; then
//do stuff
fi
这仅在您请求特定值并执行简单比较时有效。如果您需要比 bash 提供更多的操作,您可以使用 awk
,它可以从文本中选择单独的列并执行比较:
if [ $(echo $field | awk '{if ($1 == value && $2 == value2) print 1; else print 0}') == "1" ]; then
//do stuff
fi
在这里,awk
命令打印出 true 或 false(1 或 0),bash if
可以使用它来比较和分支。
这两个示例都假设您的 SQL 查询仅返回一行,您可以通过基于 ID 选择来确保这一点。但是,如果您正在运行更复杂的查询,您可能希望使用 SQL 命令 LIMIT 1
将响应限制在第一行。
错误检查:验证数据库或表是否存在
虽然您可能专门为您的服务器编写此脚本,但一些错误检查不会伤害任何人。在弄乱它们之前,您需要验证您将使用的数据库和表是否确实存在。另外,如果与数据库的连接不工作,它也会在这里出错。
如果 dbname
不存在(返回代码 > 0),则 SQL 命令 USE dbname
将产生错误。您可以在 if
块中使用它来检查数据库是否已正确配置:
if mysql -u root -e 'USE mydbname'; then
//database exists, do stuff
fi
您可以通过使用 !
启动布尔值来反转 if
块,这将仅在未配置数据库时运行代码,这对于首次设置很有用.
同样,您可以通过尝试访问第一行来检查表是否存在:
if mysql -u root -e 'USE mydbname; SELECT * FROM tablename LIMIT 1'; then
//database and table exist, do more stuff
fi
因为 if
块会检查您放入其中的任何命令的返回代码,而 MySQL 命令在遇到问题时会返回错误代码,因此您可以在 if
中使用任何命令 块以解决错误。