实战

Claude Code Shell 脚本自动化实战:用 AI 编写和调试复杂 Bash/Zsh 脚本

Claude Code 辅助 Shell 脚本开发的完整指南:让 Claude 生成 Bash/Zsh 脚本的高效提示词、复杂脚本的调试方法(set -x 逐行追踪)、常见运维场景脚本(日志清理/备份/监控告警/批量操作)、跨平台兼容性处理(macOS vs Linux 差异)、脚本安全性检查(避免注入/权限最小化)、让 Claude 解释复杂 awk/sed/find 命令,以及将一次性脚本重构为可复用工具库的方法。

2026/3/205分钟 阅读ClaudeEagle

Shell 脚本是运维和自动化的基石,Claude Code 能帮你快速生成、 理解和调试各种复杂脚本,即使你不是 Shell 专家。

高效提示词模板

# 通用脚本生成模板 帮我写一个 Bash 脚本,功能:[描述] 要求: - 在脚本顶部用 set -euo pipefail(严格模式) - 加入参数校验,缺少必要参数时打印用法并退出 - 关键操作前输出日志(带时间戳) - 操作失败时输出有意义的错误信息 - 脚本结尾输出执行摘要 目标系统:[macOS / Ubuntu 22.04 / CentOS 7]

常用运维脚本示例

日志清理脚本

你:写一个日志清理脚本,清理 /var/log/app/ 下超过 30 天的日志文件, 超过 500MB 的单个文件直接压缩,每次清理记录操作日志 Claude: ```bash #!/bin/bash set -euo pipefail LOG_DIR="/var/log/app" AUDIT_LOG="/var/log/cleanup_audit.log" MAX_AGE_DAYS=30 MAX_SIZE_MB=500 TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') log() { echo "[$TIMESTAMP] $*" | tee -a "$AUDIT_LOG"; } # 参数校验 [[ -d "$LOG_DIR" ]] || { log "ERROR: 目录不存在: $LOG_DIR"; exit 1; } log "开始清理 $LOG_DIR" deleted=0; compressed=0 # 压缩大文件 while IFS= read -r -d '' file; do size_mb=$(du -m "$file" | cut -f1) if (( size_mb > MAX_SIZE_MB )); then gzip "$file" log "压缩: $file (${size_mb}MB)" ((compressed++)) fi done < <(find "$LOG_DIR" -name "*.log" -not -name "*.gz" -print0) # 删除旧文件 while IFS= read -r -d '' file; do rm "$file" log "删除: $file" ((deleted++)) done < <(find "$LOG_DIR" -name "*.log.gz" -mtime +$MAX_AGE_DAYS -print0) log "完成:压缩 $compressed 个,删除 $deleted 个"

服务健康检查告警脚本

bash
#!/bin/bash
set -euo pipefail

# 让 Claude 生成这个脚本:
# 检查多个 HTTP 服务端点,如果连续 3 次失败则发送钉钉/企微告警

SERVICES=(
    "https://api.example.com/health"
    "https://web.example.com"
    "https://admin.example.com/ping"
)
WEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=xxxx"
FAIL_THRESHOLD=3
STATE_FILE="/tmp/service_check_state.json"

check_service() {
    local url=$1
    local http_code
    http_code=$(curl -s -o /dev/null -w "%{http_code}"         --connect-timeout 5 --max-time 10 "$url" || echo "000")
    [[ "$http_code" == "200" ]] && echo "ok" || echo "fail:$http_code"
}

send_alert() {
    local service=$1 message=$2
    curl -s -X POST "$WEBHOOK_URL"         -H "Content-Type: application/json"         -d "{"msgtype":"text","text":{"content":"[告警] $service\n$message"}}"
}

for svc in "${SERVICES[@]}"; do
    result=$(check_service "$svc")
    # ... 状态记录和阈值判断逻辑
done

调试复杂脚本

让 Claude 加 set -x 调试模式

你:这个脚本偶发失败,加上调试输出帮我找原因: [粘贴脚本] Claude:在脚本开头加 set -x,在可疑行加 set +x 收窄范围: #!/bin/bash set -x # 开启命令追踪 # 在可疑区域精确调试: set -x problematic_function set +x

解释复杂命令

你:解释这行命令是什么意思: find . -name "*.log" -newer /tmp/ref -exec awk '/ERROR/{count++} END{if(count>10) print FILENAME, count}' {} \; | sort -t' ' -k2 -rn | head -5 Claude:这行命令分步骤解析: 1. find . -name "*.log" -newer /tmp/ref 查找当前目录下比 /tmp/ref 更新的所有 .log 文件 2. -exec awk '...' {} \; 对每个文件执行 awk:统计 ERROR 行数,超过 10 行才打印「文件名 错误数」 3. sort -t' ' -k2 -rn 按第 2 列(错误数)倒序数字排序 4. head -5 只显示错误最多的前 5 个文件 用途:快速找出最近有大量错误的日志文件

跨平台兼容性处理

bash
# macOS 和 Linux 的常见差异,让 Claude 帮你处理

# 日期命令(macOS 用 gdate 或特殊语法)
if [[ "$(uname)" == "Darwin" ]]; then
    DATE_CMD="gdate"  # brew install coreutils
else
    DATE_CMD="date"
fi
YESTERDAY=$($DATE_CMD -d "yesterday" +%Y-%m-%d)

# stat 命令语法不同
if [[ "$(uname)" == "Darwin" ]]; then
    file_size=$(stat -f%z "$file")
else
    file_size=$(stat -c%s "$file")
fi

# sed -i 在 macOS 上需要备份后缀
if [[ "$(uname)" == "Darwin" ]]; then
    sed -i '' 's/old/new/g' file.txt
else
    sed -i 's/old/new/g' file.txt
fi

脚本安全性检查

你:帮我检查这个脚本有没有安全问题: [粘贴脚本] Claude 检查要点: 1. 用户输入是否有 Shell 注入风险 2. 临时文件是否使用 mktemp(避免 /tmp/固定名 竞态攻击) 3. 密码/Token 是否在命令行参数中(会出现在 ps aux) 4. 文件权限是否最小化(脚本不应是 777) 5. curl/wget 下载的脚本是否直接 bash 执行(供应链风险)

重构为可复用工具库

你:我有 10 个脚本,每个都重复写了同样的日志函数和错误处理。 帮我提取为一个 lib.sh 库,然后修改所有脚本来 source 它 Claude: # lib.sh - 通用工具库 #!/bin/bash SCRIPT_NAME=$(basename "${BASH_SOURCE[1]}") LOG_FILE="${LOG_DIR:-/var/log}/${SCRIPT_NAME%.sh}.log" log_info() { echo "[$(date '+%T')] [INFO] $*" | tee -a "$LOG_FILE"; } log_warn() { echo "[$(date '+%T')] [WARN] $*" | tee -a "$LOG_FILE" >&2; } log_error() { echo "[$(date '+%T')] [ERROR] $*" | tee -a "$LOG_FILE" >&2; } die() { log_error "$*"; exit 1; } # 在各脚本中引用: source "$(dirname "$0")/lib.sh"

来源:Claude Code 官方文档 - docs.anthropic.com/en/docs/claude-code

相关文章推荐

实战OpenClaw 与 Claude Code 协同使用实战:AI 聊天助手 + AI 编程助手的终极组合OpenClaw 与 Claude Code 协同使用的完整实战指南:两款工具的定位差异(OpenClaw=聊天AI助手框架,Claude Code=代码库直接操作的编程工具)、在 OpenClaw 中通过 exec 工具调用 Claude Code CLI(claude 命令)执行编程任务、把 OpenClaw 的 Telegram 消息转化为 Claude Code 任务(用自然语言描述→Claude Code执行→返回结果)、使用 OpenClaw Cron 定期触发 Claude Code 执行代码审查/依赖更新/测试/文档生成、CRS 代理在两者中的统一接入方案,以及常见的协同架构模式(主动触发/被动响应/定时执行)。2026/3/24实战Claude Code 自动生成 OpenAPI 文档:从代码到 Swagger UI 一键完成Claude Code 自动生成 OpenAPI(Swagger)文档完整教程:从现有代码逆向生成 OpenAPI 3.1 规范、为 FastAPI/Express/Gin 添加完整的 schema 注释、让 Claude 补全缺失的请求/响应 schema 定义、生成带真实示例值的 Swagger 文档、将 OpenAPI Spec 转为各语言客户端 SDK(openapi-generator)、保持文档与代码同步的 CI/CD 方案,以及从 Postman Collection 迁移到 OpenAPI 的方法。2026/3/20实战Claude Code CI/CD 完全集成指南:GitHub Actions 自动化代码审查与测试Claude Code 与 CI/CD 流水线完整集成教程:GitHub Actions 中非交互模式(claude -p)调用、PR 自动代码审查 Workflow、自动测试生成、构建失败时的 AI 诊断、安全扫描集成、Claude API Key 的 Secrets 管理、控制成本的模型选择策略(PR 审查用 Sonnet/失败诊断用 Haiku),以及 GitLab CI 和 Jenkins 的适配方案。2026/3/20实战用 Claude Code 写 Python 脚本:自动化日常任务的 8 个实用场景用 Claude Code 编写 Python 自动化脚本实战:8 个高频场景(文件批处理/Excel 处理/API 调用/定时任务/数据清洗/发送通知/Web 爬取/PDF 处理),每个场景给出完整 Prompt 模板和代码结构。2026/3/14实战Claude Code 非交互模式(Headless):脚本自动化与 CI/CD 集成实战Claude Code Headless 非交互模式完整实战:基础 -p 参数用法、三大自动化脚本(PR 摘要/安全扫描/Changelog 生成)、GitHub Actions 集成(每 PR 自动审查/每周技术债务扫描)、输出格式控制与批量任务成本优化。2026/3/14实战Claude Code Hooks 实战:每次保存自动格式化、拦截危险命令、桌面通知Claude Code Hooks 实战教程:五个即用示例(桌面通知/文件自动格式化/危险命令拦截/压缩后上下文注入/配置变更审计)、Hook 配置位置(全局/项目/本地)、退出码含义(允许/上下文/阻止)、七大 Hook 事件速查表、Prompt-based AI 判断 Hook 进阶用法。2026/3/14