AI编写Shell脚本提升运维效率
为什么推荐用AI来写Shell脚本
很多运维新手一听到“写脚本”就头大——逻辑复杂、语法记不住、调试半天。
其实借助AI工具(比如ChatGPT、Copilot),你只要用自然语言描述需求,AI就能生成对应的Shell脚本,你再稍作检查和修改即可。
这尤其是处理「日志清理」「文件备份」「批量监控」这类重复性任务时,AI编写Shell脚本提升运维效率的效果非常明显。
准备工作:你需要什么
- 一台Linux服务器或虚拟机(CentOS 7+/Ubuntu 20.04+)
- 一个AI对话工具(以ChatGPT为例,注册后即可使用)
- 基础的命令行操作能力(会使用
cd、ls、vim等) - sudo权限(部分脚本需要写系统目录)
第一步:用AI生成你的第一个自动化脚本
假设你想写一个脚本来清理/var/log下超过30天的.log文件,避免磁盘爆满。
打开ChatGPT,输入以下提示:
请写一个Shell脚本,扫描/var/log目录下所有以.log结尾的文件,找出最后修改时间超过30天的,然后删除它们。要求:删除前先打印将要删除的文件名,执行删除时带确认步骤(可选跳过),脚本需要有注释。
AI会返回类似下面的代码:
#!/bin/bash
# 日志清理脚本 - 删除/var/log下30天前的.log文件
LOG_DIR="/var/log"
DAYS=30
DRY_RUN=true # 设置为false时真正删除
echo "正在扫描 $LOG_DIR 下超过 $DAYS 天的.log文件..."
for file in "$LOG_DIR"/*.log; do
if [ -f "$file" ]; then
age_days=$(( ( $(date +%s) - $(stat -c %Y "$file") ) / 86400 ))
if [ $age_days -gt $DAYS ]; then
if [ "$DRY_RUN" = true ]; then
echo "[模拟] 将删除: $file"
else
echo "正在删除: $file"
rm -f "$file"
fi
fi
fi
done
把这段代码保存为clean_log.sh,然后用chmod +x clean_log.sh赋予执行权限。
先以模拟模式运行一次(DRY_RUN=true),查看输出是否符合预期。
确认无误后,把DRY_RUN改为false即可真正执行。
避坑指南:AI生成脚本的常见陷阱
1. 路径硬编码问题
AI默认会将目录写死(如上面的/var/log),如果你的服务器日志在其他位置,记得修改LOG_DIR变量。
建议用参数化方式,比如接受命令行参数。
2. 缺少错误处理
很多AI生成的脚本没有set -e(遇到错误退出)或者错误检查。一定要在脚本开头加上set -euo pipefail,否则中间某条命令失败后脚本会继续执行,可能导致严重后果。
3. 权限不足
删除/var/log下的文件需要root权限,运行脚本时要先sudo ./clean_log.sh。
4. 文件名包含空格或特殊字符
AI经常直接写for file in *.log,但文件名若含空格就会出错。
上述示例使用了"$file"引号包裹,是正确做法;
如果你拿到的代码没有引号,一定要手动加上。
如何验证脚本正确性并持续改进
- 使用
bash -n script.sh检查语法错误。 - 单步执行:用
bash -x script.sh查看每一条命令的执行过程。 - 小范围测试:先在测试目录(比如
/tmp/test_log)中放几个测试文件,确认脚本行为。 - 让AI帮你优化:把脚本原文粘贴给AI,告诉它“请帮我增加日志记录功能”或“改成支持命令行参数”,它能立刻生成改进版本。
实际运维中,AI编写Shell脚本提升运维效率的关键在于:你能清晰描述需求,并具备基础的脚本阅读和修改能力。
遇到错误时,复制报错信息问AI,往往比手动排查快得多。
加餐:让AI帮你写定时任务
脚本写好后,通常要加入cron定期执行。
同样可以用AI生成cron表达式:
帮我写一行cron配置,每天早上6点运行/root/clean_log.sh
AI会返回:
0 6 * * * /root/clean_log.sh
然后你执行crontab -e,粘贴进去即可。
注意脚本路径要用绝对路径。
最后提醒:不要直接拿AI生成的脚本用在生产环境,至少要读一遍逻辑,加上set -e和权限检查。
循序渐进,你不仅能提升效率,还能顺便学会Shell脚本本身。