从 Linux Bash 脚本检查 MySQL 数据库中的值从 Linux Bash 脚本检查 MySQL 数据库中的值从 Linux Bash 脚本检查 MySQL 数据库中的值从 Linux Bash 脚本检查 MySQL 数据库中的值
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

从 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 中使用任何命令 块以解决错误。

©2015-2025 艾丽卡 support@alaica.com