Skip to main content
复盘日:恭喜你完成了第一周的学习!今天是巩固和总结的日子。我们将回顾过去 6 天学到的所有知识,整理成速查表,并记录遇到的问题和解决方案。今天不只是复习,而是要彻底理解 “如何将学到的知识系统化”“如何建立自己的知识库” 以及 “如何为下一阶段的学习做好准备”

复盘内容 | Review

Day 01 - 基础入门
  • Shebang (#!/bin/bash):指定解释器
  • 变量赋值:name="value"(等号两边不能有空格)
  • 变量引用:$name${name}
  • 引号区别:单引号不解析变量,双引号解析变量
  • 执行权限:chmod +x script.sh
Day 02 - 流程控制
  • 条件判断:if [ condition ]; then ... fi
  • 文件测试:[ -f "file" ][ -d "dir" ]
  • 字符串比较:[ "$str" == "value" ]
  • 数值比较:[ $num -gt 10 ]
  • for 循环:for i in {1..5}; do ... done
  • while 循环:while [ condition ]; do ... done
Day 03 - 管道和函数
  • 管道:command1 | command2(数据从左到右流动)
  • 重定向:>(覆盖)、>>(追加)
  • 函数定义:function_name() { ... }
  • 函数参数:$1$2
  • 返回值:通过 returnecho 返回
Day 04 - 三剑客
  • grep:过滤行,grep "pattern" file
  • awk:处理列,awk '{print $1}' file
  • sed:文本替换,sed 's/old/new/g' file
  • 组合使用:grep | awk | sed
Day 05 - 生产级脚本
  • 函数封装:将重复代码封装成函数
  • 错误处理:检查命令执行结果 $?
  • 颜色输出:使用 ANSI 转义码
  • 日志记录:统一日志输出格式
  • 配置管理:集中管理配置变量
Day 06 - 综合实战
  • Shell + SQL 整合:使用 mysql -e 执行 SQL
  • Here Document:cat <<EOF 处理多行文本
  • 报表生成:格式化输出为 Markdown
  • 异常处理:检查连接、验证结果
Day 01 - 建表基础
  • 字段类型:INT UNSIGNEDVARCHAR(n)DATETIME
  • 约束:PRIMARY KEYNOT NULLDEFAULTAUTO_INCREMENT
  • 存储引擎:ENGINE=InnoDB
  • 字符集:DEFAULT CHARSET=utf8mb4
Day 02 - CRUD 操作
  • INSERTINSERT INTO table (col1, col2) VALUES (val1, val2)
  • SELECTSELECT * FROM table WHERE condition
  • UPDATEUPDATE table SET col=val WHERE condition(必须加 WHERE!)
  • DELETEDELETE FROM table WHERE condition(必须加 WHERE!)
  • 软删除 vs 硬删除:生产环境建议使用软删除
Day 03 - 聚合和联表
  • 聚合函数:COUNT()SUM()AVG()MAX()MIN()
  • GROUP BY:SELECT col, COUNT(*) FROM table GROUP BY col
  • LEFT JOIN:返回左表所有记录
  • INNER JOIN:只返回两表都有匹配的记录
  • COALESCE:处理 NULL 值
Day 04 - 索引优化
  • 创建索引:ALTER TABLE table ADD INDEX idx_name (column)
  • EXPLAIN:分析查询执行计划
  • type 字段:ALL(最慢)到 const(最快)
  • 索引失效:LIKE 左模糊、函数操作、类型转换
Day 05 - 慢查询优化
  • 避免全表扫描:使用索引、避免 !=、避免函数操作
  • 深分页优化:使用子查询先查 ID,再回表
  • 小表驱动大表:JOIN 时小表作为驱动表
  • 优化原则:避免索引失效、利用覆盖索引
Day 06 - 综合应用
  • 复杂查询:结合聚合、分组、联表
  • 数据统计:生成业务报表
  • Shell 整合:在脚本中执行 SQL 查询

复盘产出 | Output

1. 第一阶段速查表

创建一个属于你自己的常用命令清单,方便日后查阅。
变量操作
name="value"           # 定义变量
echo $name             # 输出变量
readonly name="value"  # 只读变量
文件操作
chmod +x file.sh       # 添加执行权限
mkdir -p dir           # 创建目录
cp file1 file2         # 复制文件
mv file1 file2         # 移动/重命名
rm file                # 删除文件
条件判断
[ -f "file" ]          # 文件存在
[ -d "dir" ]           # 目录存在
[ "$str" == "val" ]    # 字符串相等
[ $num -gt 10 ]        # 数值大于
循环
for i in {1..5}; do ... done
while [ condition ]; do ... done
三剑客
grep "pattern" file
awk '{print $1}' file
sed 's/old/new/g' file
表操作
CREATE TABLE ...       # 创建表
ALTER TABLE ...        # 修改表
DROP TABLE ...         # 删除表
DESCRIBE table;        # 查看表结构
数据操作
INSERT INTO ...        # 插入
SELECT ... FROM ...    # 查询
UPDATE ... SET ...     # 更新(必须加 WHERE!)
DELETE FROM ...        # 删除(必须加 WHERE!)
索引操作
ALTER TABLE ... ADD INDEX ...
SHOW INDEX FROM table;
EXPLAIN SELECT ...;
常用函数
COUNT(*)               # 统计行数
SUM(column)            # 求和
AVG(column)            # 平均值
MAX(column)            # 最大值
MIN(column)            # 最小值
COALESCE(val, 0)       # 处理 NULL

2. 问题清单

记录过去 6 天遇到的坑和解决方法,这是你的宝贵经验。

常见问题记录

Shell 常见问题
  • 变量赋值等号两边有空格 → 报错
  • 字符串比较未加引号 → 空变量导致错误
  • 文件路径有空格未加引号 → 命令失败
  • 函数未定义就调用 → 报错
SQL 常见问题
  • UPDATE/DELETE 忘记加 WHERE → 更新/删除所有数据
  • 字符串比较未加引号 → 语法错误
  • LIKE 左模糊匹配 → 索引失效
  • 对字段使用函数 → 索引失效

解决方案记录

Shell 解决方案
  • 变量赋值:等号两边不能有空格
  • 字符串比较:必须加引号
  • 文件路径:始终加引号
  • 函数调用:先定义后调用
SQL 解决方案
  • UPDATE/DELETE:必须加 WHERE,更新前先 SELECT 确认
  • 字符串比较:必须加引号
  • 模糊匹配:尽量使用右模糊 LIKE 'prefix%'
  • 函数操作:将函数移到常量侧

3. 优化示例

挑选一个你认为写得最好的脚本进行重构,展示你的进步。
原始版本
#!/bin/bash
project_name="InsightfulOps"
echo "Please enter today's date:"
read current_date
echo "Welcome to $project_name, today is $current_date"
优化版本(应用 Week 1 学到的知识):
#!/bin/bash
# 01_hello_enhanced.sh - 增强版 Hello World

# 配置区
PROJECT_NAME="InsightfulOps"
DATE_FORMAT="YYYY-MM-DD"

# 颜色输出函数
function echo_green() {
    echo -e "\033[32m$1\033[0m"
}

# 输入验证函数
function validate_date() {
    local date_str="$1"
    # 简单的日期格式验证(实际应该更严格)
    if [[ "$date_str" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
        return 0
    else
        return 1
    fi
}

# 主流程
echo_green "Welcome to $PROJECT_NAME"
echo "Please enter today's date ($DATE_FORMAT):"
read current_date

# 输入验证
if validate_date "$current_date"; then
    echo_green "Date validated: $current_date"
    echo "Welcome to $PROJECT_NAME, today is $current_date"
else
    echo "Invalid date format. Please use $DATE_FORMAT"
    exit 1
fi
改进点
  • 添加了配置区,便于修改
  • 添加了颜色输出函数,提高可读性
  • 添加了输入验证,提高健壮性
  • 添加了错误处理,优雅退出
  • 添加了注释,便于理解

🏆 阶段性总结

恭喜你!你已经完成了 Project Team 基础训练营的第一阶段。
到这里你已经掌握了:
  • Shell 脚本能力:从基础语法到生产级脚本编写
  • SQL 数据库能力:从建表到性能优化
  • 整合能力:将 Shell 和 SQL 结合起来解决实际问题
  • 工程化思维:函数封装、错误处理、代码复用
  • 为后续学习打下基础:Python、FastAPI、Go 的学习将更轻松

第一周学习成果

Shell 技能树

✅ 基础语法(变量、输出、权限) ✅ 流程控制(条件、循环) ✅ 管道和重定向 ✅ 函数封装 ✅ 三剑客(grep/awk/sed) ✅ 生产级脚本编写

SQL 技能树

✅ 表结构设计 ✅ CRUD 操作 ✅ 聚合和分组 ✅ 联表查询 ✅ 索引优化 ✅ 慢查询分析

下一阶段预告

第二周:Python 自动化与数据处理
  • Day 08-14:学习 Python 基础语法、数据处理、自动化脚本
  • 你将能够:使用 Python 处理数据、编写自动化工具、与数据库交互
  • 第一周的基础将帮助你更快地理解 Python 的语法和概念

今日产出物

  • day07/shell_cheatsheet.md - Shell 命令速查表
  • day07/sql_cheatsheet.md - SQL 命令速查表
  • day07/problems_and_solutions.md - 问题清单和解决方案
  • day07/optimized_script.sh - 优化后的脚本示例

参考资源


上一课

Day 06:Shell + SQL 综合实战

下一阶段

Day 08:Python 基础入门