实战日:今天是第一周的”期末考试”。你需要融合前 5 天学到的 Shell 逻辑、SQL 查询、管道与重定向,编写一个完整的 自动化报表生成工具。今天不只是写代码,而是要彻底理解 “如何将 Shell 和 SQL 结合起来”、“如何生成格式化的报表” 以及 “如何编写健壮的生产级脚本”。
实战目标 | Project Goal
我们将开发一个名为06_sql_shell_integrate.sh 的工具,用于自动化统计业务数据。
核心功能
- 自动连接 MySQL 数据库
- 执行复杂的联表统计查询
- 格式化输出 Markdown 报表
- 添加时间戳并归档
- 错误处理和日志记录
涉及技能
- Shell: 变量、函数、Here Document、错误处理
- SQL:
GROUP BY,JOIN,COUNT,SUM - Linux: 输出重定向、日期处理、文件操作
- Markdown: 表格格式化
代码任务 (90 mins)
环境准备与数据模拟
首先确保数据库中有足够的测试数据。执行以下 SQL 准备环境:任务分解:验证步骤:
- 确保 orders 表存在
- 插入模拟订单数据
- 验证数据完整性
-
连接 MySQL:
-
执行初始化 SQL:
或者直接复制粘贴执行
-
验证数据:
编写自动化脚本
这是今天的重头戏。我们将使用 常见错误:验证步骤:
mysql -e 命令在 Shell 中执行 SQL,并利用 Here Document (EOF) 处理多行 SQL。任务分解:- 定义配置变量
- 编写数据库连接检查函数
- 编写 SQL 查询函数
- 编写报表生成函数
- 添加错误处理
-
确保 MySQL 容器运行:
-
运行脚本:
-
检查输出:
- 应该看到数据库连接检查结果
- 应该看到报表生成成功信息
- 应该看到报表预览
-
查看生成的报表:
-
验证报表内容:
- 应该包含用户统计表格
- 应该包含汇总信息
- 表格格式应该正确
添加异常处理 (Bonus)
目前的脚本比较”脆弱”,如果数据库连接失败会怎样?让我们增强错误处理。改进点:错误处理最佳实践:
- 数据库连接检查
- SQL 执行错误处理
- 文件操作错误处理
- 更详细的日志记录
错误检查
错误检查
- 检查命令执行结果:
if [ $? -eq 0 ]; then ... fi - 检查文件是否存在:
if [ -f "$file" ]; then ... fi - 检查目录是否可写:
if [ -w "$dir" ]; then ... fi - 检查变量是否为空:
if [ -z "$var" ]; then ... fi
日志记录
日志记录
- 记录所有操作:成功和失败都要记录
- 包含时间戳:便于追踪问题
- 包含详细信息:错误消息要具体
- 使用不同级别:INFO、WARNING、ERROR
优雅退出
优雅退出
- 使用 exit 码:0 表示成功,非零表示失败
- 清理资源:退出前清理临时文件
- 提供错误信息:告诉用户发生了什么
今日产出物
day06/06_sql_shell_integrate.sh- Shell + SQL 报表生成脚本day06/init_data.sql- 测试数据初始化脚本day06/reports/weekly_report_*.md- 生成的报表文件
参考代码
查看参考代码
在 GitHub 查看完整的示例代码
在线运行
使用在线编辑器测试代码
实际应用场景
Shell + SQL 整合在生产环境的应用
- 自动化报表:定时生成业务报表,发送给管理层
- 数据导出:将数据库数据导出为 CSV、JSON 等格式
- 数据同步:在不同数据库之间同步数据
- 监控告警:监控数据库指标,异常时发送告警
- 数据备份:结合 Shell 脚本和 SQL 实现数据备份
报表生成的最佳实践
- 模板化:使用模板生成报表,便于维护
- 格式化:生成 Markdown、HTML、PDF 等格式
- 自动化:使用 cron 定时生成报表
- 归档:保存历史报表,便于对比分析
- 通知:报表生成后自动发送邮件或消息
上一天: 优化实战
Day 05 | Shell 脚本实战与 SQL 优化
下一天: 第一阶段复盘
Day 07 | 第一阶段复盘