🏠 首页 攻略 用AI写Shell脚本:一句话生成,告别重复敲命令

用AI写Shell脚本:一句话生成,告别重复敲命令

每次都要手写Shell脚本太麻烦?教你用ChatGPT生成高质量Shell脚本,从文件备份到日志清理,附Prompt模板和避坑指南。

你是不是也这样:每次要备份文件,就得手动敲一堆命令,复制粘贴半天。

后来学会了写Shell脚本,但又忘了语法,临时百度半天。

现在有了AI,你只需要描述需求,脚本就出来了。

但AI生成的脚本不能直接跑,有几个坑要注意。今天教你怎么用AI写Shell脚本。


一、为什么用AI写Shell脚本?

Shell脚本有这几个痛点:

  1. 语法容易忘$? 是啥?$@$* 啥区别?每次用都查一遍。
  2. 调试麻烦:脚本跑错了,错误信息又长又看不懂。
  3. 边界情况多:文件不存在怎么办?权限不够怎么办?变量为空怎么办?

AI能帮你解决前两个问题。第三个问题,需要你自己加。


二、5个高频场景和Prompt模板

场景1:批量重命名文件

需求: 把当前目录下所有 .jpg 文件,在前面加上日期前缀。

Prompt模板:

帮我写一个Shell脚本:
- 遍历当前目录下所有扩展名为.jpg的文件
- 在每个文件名前面加上今天的日期前缀,格式为 YYYYMMDD_
- 如果文件名已经以日期前缀开头,跳过
- 脚本要安全,重命名前打印将要执行的命令

AI生成的脚本大概长这样:

#!/bin/bash
PREFIX=$(date +%Y%m%d)

for file in *.jpg; do
    [ -f "$file" ] || continue
    if [[ "$file" == ${PREFIX}_* ]]; then
        echo "跳过已处理: $file"
        continue
    fi
    new_name="${PREFIX}_${file}"
    echo "重命名: $file -> $new_name"
    mv "$file" "$new_name"
done

场景2:日志文件清理

需求: 清理30天前的日志文件,保留最近的10个。

Prompt模板:

帮我写一个Shell脚本:
- 清理 /var/log/myapp/ 目录下超过30天的.log文件
- 同时保留最近生成的10个日志文件(不过期)
- 执行前先打印将要删除的文件列表
- 删除完成后统计释放的磁盘空间
- 脚本要加错误处理,找不到目录时给出提示

AI生成的脚本:

#!/bin/bash
LOG_DIR="/var/log/myapp"
KEEP_COUNT=10
RETENTION_DAYS=30

if [ ! -d "$LOG_DIR" ]; then
    echo "错误: 目录 $LOG_DIR 不存在"
    exit 1
fi

# 找出30天前的日志文件
OLD_FILES=$(find "$LOG_DIR" -name "*.log" -type f -mtime +${RETENTION_DAYS} | sort)

# 保留最近10个(包含非30天前的)
ALL_FILES=$(find "$LOG_DIR" -name "*.log" -type f | sort -r)
KEEP_FILES=$(echo "$ALL_FILES" | head -${KEEP_COUNT})

# 找出需要删除的文件(30天前且不在保留列表中的)
FILES_TO_DELETE=""
while IFS= read -r f; do
    if ! echo "$KEEP_FILES" | grep -q "$f"; then
        FILES_TO_DELETE="$FILES_TO_DELETE $f"
    fi
done <<< "$OLD_FILES"

if [ -z "$FILES_TO_DELETE" ]; then
    echo "没有需要清理的日志文件"
    exit 0
fi

echo "即将删除以下文件:"
echo "$FILES_TO_DELETE"

# 计算释放空间
FREE_BEFORE=$(du -sh "$LOG_DIR" | cut -f1)
echo "当前目录占用: $FREE_BEFORE"

for f in $FILES_TO_DELETE; do
    rm -f "$f"
done

FREE_AFTER=$(du -sh "$LOG_DIR" | cut -f1)
echo "清理后目录占用: $FREE_AFTER"
echo "清理完成"

场景3:服务器状态监控

需求: 监控CPU、内存、磁盘使用率,超过阈值发通知。

Prompt模板:

帮我写一个Shell脚本,监控Linux服务器状态:
- 检查CPU使用率(top命令),超过80%输出警告
- 检查内存使用率(free命令),超过90%输出警告
- 检查磁盘使用率(df命令),根分区超过85%输出警告
- 所有检查合并成一行输出,格式为:[时间] [检查项] [状态] [数值]
- 脚本要支持命令行传入阈值参数

场景4:自动备份数据库

需求: 每天凌晨备份MySQL数据库,保留7天。

Prompt模板:

帮我写一个Shell脚本:
- 使用mysqldump备份指定数据库
- 备份文件名包含日期和时间戳
- 压缩备份文件为.gz格式
- 备份到指定目录
- 自动删除7天前的旧备份
- 备份失败时输出错误日志
- 脚本支持通过环境变量配置数据库连接信息

场景5:批量处理图片

需求: 把所有PNG图片转成JPG,压缩到指定尺寸。

Prompt模板:

帮我写一个Shell脚本:
- 遍历指定目录下的所有.png文件
- 使用ImageMagick的convert命令将PNG转成JPG,质量设为85
- 输出到同名目录下的.jpg文件
- 转换前检查输入文件是否存在
- 转换失败时跳过该文件并记录错误
- 最后输出转换统计信息

三、AI写Shell脚本的3个坑

坑1:路径写死

AI生成的脚本经常用绝对路径,但你的环境可能不一样。

解决方法: 在prompt里说明你的环境,让AI用相对路径或变量。

坑2:权限问题

AI不知道你的文件权限,生成的脚本可能需要root权限。

解决方法: 在prompt里说明运行权限,让AI加上权限检查。

坑3:命令不存在

AI可能用了一些你系统里没有的命令,比如 jqparallel

解决方法: 在prompt里说明你的系统环境,让AI用标准命令。


四、写好Shell脚本的3个习惯

习惯1:加shebang

每个脚本第一行加上 #!/bin/bash,告诉系统用哪个解释器。

习惯2:加注释

AI生成的脚本注释可能不够,自己补上关键逻辑的注释。

习惯3:测试再上线

AI生成的脚本先在测试环境跑一遍,确认没问题再放到生产环境。


五、推荐工具

工具用途费用
ChatGPT生成Shell脚本免费版够用
Claude生成复杂脚本,解释清晰免费版够用
Navbox JSON格式化格式化脚本输出免费
Navbox 正则构建器调试脚本中的正则免费

用AI写Shell脚本,最大的价值不是省时间,而是减少出错。

脚本跑错了,损失的可不只是几分钟。

多花30秒让AI生成,再花1分钟review,比事后排查省得多。