楠风测开复习日记 Day12
- 2026-10-11 21:34:25
楠风测开复习日记 Day12
AI 自动写 Shell 脚本:5 个实战场景
🤖 ChatGPT + DeepSeek 实战 + Prompt 模板 👉 Day 12 / 90 天 ⏱️ 阅读 9 分钟 | 建议收藏 ⭐
👋 朋友们好,我是楠风
Day 11 我讲了 30 个 Linux 命令 + AI 辅助排查。
今天只讲一个核心:AI 辅助写 Shell 脚本。
5 个实战场景,每个都能直接落地。
工具:ChatGPT + DeepSeek 两个 AI。
❓ 为啥要写这篇?
测试工程师常卡这些事:
❌ 想写日志轮转脚本,但不会 Shell
❌ 想监控服务状态,Python 又太重
❌ 想配 ELK,但配置文件查不到
❌ 想实时告警,但工具集成麻烦
AI 5 分钟搞定。
工具:ChatGPT + DeepSeek,5 个实战场景直接落地。
学完能解决什么:
| 合计 | 9.5h | 25min |
节省 9 小时。
🤖 AI 工具选择
| ChatGPT | ||
| DeepSeek | ||
| ChatGPT | ||
| DeepSeek |
🛠️ 场景 1:日志轮转脚本
需求:每天 0 点压缩前一天日志,保留 30 天
💬 给 AI 描述需求
帮我写 Shell 脚本,要求:1. 每天 0 点压缩前一天的日志(.log → .log.gz)2. 只保留 30 天,更早的自动删除3. 日志路径:/var/log/app/4. 要有错误处理和日志输出5. 加 cron 定时任务配置平台:Linux CentOS 7Shell:bash🤖 AI 输出(ChatGPT)
#!/bin/bash# 日志轮转脚本 - 由 ChatGPT 生成LOG_DIR="/var/log/app"KEEP_DAYS=30DATE=$(date -d "yesterday" +%Y%m%d)# 1. 压缩前一天的日志echo"[$(date '+%Y-%m-%d %H:%M:%S')] 开始日志轮转"for log_file in $(find $LOG_DIR -name "*.log" -type f); do gzip "$log_file"done# 2. 删除 30 天前的归档find $LOG_DIR -name "*.gz" -mtime +$KEEP_DAYS -deleteecho"[$(date '+%Y-%m-%d %H:%M:%S')] 日志轮转完成"💡 进阶:让 AI 加 cron 配置
请帮我加上 cron 定时任务配置,每天 0 点执行AI 输出:
# 编辑 crontabcrontab -e# 添加这一行0 0 * * * /usr/local/bin/log-rotate.sh >> /var/log/rotate.log 2>&1实际效果:省去 2 小时查文档时间。
🛠️ 场景 2:服务健康检查
需求:检查 nginx/mysql/redis 三个服务是否存活
💬 给 DeepSeek 描述(中文)
帮我写一个 Linux Shell 脚本:1. 检查 nginx、mysql、redis 三个服务是否在运行2. 如果服务挂了,自动重启 + 发钉钉 webhook3. 钉钉 webhook URL:https://oapi.dingtalk.com/robot/send?access_token=xxx4. 消息内容:服务名 + 状态 + 时间5. 加日志输出到 /var/log/health-check.log🤖 AI 输出(DeepSeek)
#!/bin/bash# 服务健康检查脚本 - 由 DeepSeek 生成WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=xxx"LOG_FILE="/var/log/health-check.log"SERVICES=("nginx""mysqld""redis")send_dingtalk() {local service=$1local status=$2local msg="{\"msgtype\":\"text\",\"text\":{\"content\":\"⚠️ ${service}${status} at $(date '+%Y-%m-%d %H:%M:%S')\"}}" curl -X POST "$WEBHOOK" -H "Content-Type: application/json" -d "$msg"}echo"[$(date '+%Y-%m-%d %H:%M:%S')] 开始健康检查" >> $LOG_FILEfor SERVICE in"${SERVICES[@]}"; doif systemctl is-active --quiet "$SERVICE"; thenecho"✅ $SERVICE 运行正常" >> $LOG_FILEelseecho"❌ $SERVICE 未运行,正在重启..." >> $LOG_FILE systemctl restart "$SERVICE" send_dingtalk "$SERVICE""已重启"fidoneecho"[$(date '+%Y-%m-%d %H:%M:%S')] 健康检查完成" >> $LOG_FILE🛠️ 场景 3:日志关键字监控
需求:实时监控错误日志,关键字告警
💬 给 ChatGPT 描述需求
帮我写 Shell 脚本:1. 实时监控 /var/log/app/app.log2. 匹配关键字:OutOfMemory、FATAL、NullPointer3. 匹配到后发钉钉告警4. 钉钉 webhook:https://oapi.dingtalk.com/robot/send?access_token=xxx5. 消息包含:关键字 + 行内容 + 时间🤖 AI 输出(ChatGPT)
#!/bin/bash# 日志关键字实时监控 - 由 ChatGPT 生成WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=xxx"LOG_FILE="/var/log/app/app.log"KEYWORDS=("OutOfMemory""FATAL""NullPointer")send_alert() {local keyword=$1local line=$2local msg="{\"msgtype\":\"text\",\"text\":{\"content\":\"🚨 检测到 [$keyword]\\n$line\\n时间:$(date '+%Y-%m-%d %H:%M:%S')\"}}" curl -X POST "$WEBHOOK" -H "Content-Type: application/json" -d "$msg"}echo"开始监控日志:$LOG_FILE"tail -F $LOG_FILE | whileread LINE; dofor KW in"${KEYWORDS[@]}"; doifecho"$LINE" | grep -q "$KW"; thenecho"[$(date '+%Y-%m-%d %H:%M:%S')] 检测到 $KW: $LINE" send_alert "$KW""$LINE"fidonedone💡 进阶:让 AI 加防刷屏
如果同一个关键字 1 分钟内出现 10 次以上,只发一次告警避免钉钉消息轰炸AI 输出(加防刷屏):
declare -A LAST_ALERT_TIMEcheck_and_alert() {local keyword=$1local line=$2local now=$(date +%s)local last=${LAST_ALERT_TIME[$keyword]:-0}# 同一关键字 60 秒内只发一次if [ $((now - last)) -gt 60 ]; then send_alert "$keyword""$line" LAST_ALERT_TIME[$keyword]=$nowfi}🛠️ 场景 4:Filebeat 配置
需求:用 Filebeat 收集 Nginx 日志到 Elasticsearch
💬 给 DeepSeek 描述(中文)
帮我写 filebeat.yml 配置文件:1. 收集 /var/log/nginx/access.log2. 输出到 Elasticsearch(地址:192.168.1.100:9200)3. 用 ILM 自动管理索引生命周期4. 字段提取:client_ip、url、status、response_time🤖 AI 输出(DeepSeek)
# filebeat.yml - 由 DeepSeek 生成filebeat.inputs:-type:logenabled:truepaths:-/var/log/nginx/access.logfields:app:nginxenv:productionfields_under_root:trueprocessors:-add_host_metadata:~-drop_fields:fields: ["agent.ephemeral_id"]ignore_missing:trueoutput.elasticsearch:hosts: ["192.168.1.100:9200"]username:"elastic"password:"your_password"index:"nginx-%{+yyyy.MM.dd}"ilm.enabled:trueilm.policy:"nginx-policy"setup.ilm.enabled:truesetup.ilm.overwrite:truesetup.template.name:"nginx"setup.template.pattern:"nginx-*"setup.template.enabled:true🛠️ 场景 5:Logstash 解析
需求:解析 Nginx 日志为 JSON
💬 给 ChatGPT 写 Logstash 配置
写 logstash.conf:1. input: filebeat → beats input2. filter: grok 解析 nginx access log3. output: 输出到 Elasticsearch4. 含字段:client_ip、url、response_time、status🤖 AI 输出(ChatGPT)
# logstash.conf - 由 ChatGPT 生成input { beats { port => 5044 }}filter { if [type] == "nginx" { grok { match => { "message" => "%{IPORHOST:client_ip} - %{USER:remote_user} \[%{HTTPDATE:date}\] \"%{WORD:http_method} %{URIPATH:request_uri} HTTP/%{NUMBER:http_version}\" %{NUMBER:status} %{NUMBER:bytes} \"%{DATA:referrer}\" \"%{DATA:user_agent}\"" } } date { match => [ "date", "dd/MMM/yyyy:HH:mm:ss Z" ] target => "@timestamp" } mutate { convert => { "response_time" => "integer" "status" => "integer" } } }}output { elasticsearch { hosts => ["192.168.1.100:9200"] index => "nginx-parsed-%{+YYYY.MM.dd}" }}📊 5 个场景对比
| 合计 | 9 小时 |
🎯 实战 Prompt 模板(5 个场景)
📌 脚本 Prompt 模板
帮我写 Shell 脚本,要求:1. [需求 1]2. [需求 2]3. 错误处理:set -e + trap4. 日志输出:[日志路径]5. cron 配置:[定时任务]平台:Linux [发行版]Shell:bash📌 配置文件 Prompt 模板
帮我写 [工具] 配置文件:1. 输入:[数据源]2. 输出:[目标]3. 字段:[字段]4. 加错误处理📌 监控脚本 Prompt 模板
帮我写日志监控脚本:1. 监控日志:[路径]2. 匹配关键字:[列表]3. 告警方式:[钉钉/企微/邮件]4. webhook:[地址]5. 防刷屏:[规则]📈 真实数据:AI 辅助写脚本效果
传统方式:5 个场景 × 2 小时 = 10 小时AI 辅助:5 个场景 × 30 分钟 = 2.5 小时提效:4 倍关键:AI 给骨架,我补业务逻辑⚠️ AI 写脚本的 3 个注意事项
⚠️ 注意 1:必须测试
AI 写的脚本不一定 100% 对,必须在测试环境跑:
# 加 dry-run 模式if [ "$1" == "--dry-run" ]; thenecho"将执行:xxx"exit 0fi⚠️ 注意 2:必须看错误处理
AI 经常漏掉错误处理,要人工加:
set -euo pipefail # 严格模式trap'echo "Error at $LINENO"' ERR # 错误处理⚠️ 注意 3:必须加版本注释
AI 输出经常没注释,要人工加:
# 版本:v1.0# 作者:楠风测开# 创建:2024-XX-XX# 功能:日志轮转脚本# 修订:# 2024-XX-XX:初版📝 写在最后:AI 写脚本的关键
做了 5 年测试,我最大的感受是——
AI 写脚本的关键不是 AI 多强,是你多会提问。
今天:用 AI 写 1 个日志轮转脚本本周:1 个场景 × 1 工具(ChatGPT 或 DeepSeek)90 天:积累 10 个 AI 生成的脚本模板AI 提供骨架,业务逻辑你补。
💬 评论区聊聊
你们用 AI 写过哪些脚本?
效果怎么样?
我会尽量回复。
📚 关于楠风测开
我是楠风测开,5 年测试工程师,做测试平台方向。
🔧 自研 4 端测试平台:Web / 接口 / Android / PC 📝 写测试工程师成长日记
AI 重塑测试,一个人就是一个团队
🔗 找到楠风
📱 公众号:楠风测开(同名)🌐 知乎 / 掘金 / CSDN:搜索"楠风测开"💬 想进测试工程师交流群:加我微信备注「测试」📅 下期预告
Day 13:Linux 性能瓶颈 + AI 智能排查- 4 维诊断(CPU/内存/磁盘/网络)- AI 工具实战演示如果这篇文章对你有帮助:
🌟 点赞 + 在看 + 转发🌟 关注公众号「楠风测开」(同名)🌟 加我微信(备注"测试",进测试圈交流群)🌱 楠风测开 · 测试工程师复习日记 Day 12 / 90 天 全文 3500 字 | 阅读 9 分钟
【免责声明】本文为楠风测开原创,转载请联系作者授权。