用途
bash-pro 用于编写和审查面向生产自动化、CI/CD 流水线与系统工具的 Bash 脚本,重点在于防御性编程、安全性与可移植性。它适合在以下情况使用:编写或审查用于自动化、CI/CD 或运维的 Bash 脚本;加固 Shell 脚本的安全性与可移植性。
以下情况不建议使用:需要仅 POSIX shell 而不使用 Bash 特性;任务需要更高级语言处理复杂逻辑;需要 Windows 原生脚本(PowerShell)。
主要能力
该技能覆盖多个方向:
- 防御性编程与严格错误处理
- POSIX 合规与跨平台可移植性
- 安全的参数解析与输入校验
- 稳健的文件操作与临时资源管理
- 进程编排与流水线安全
- 生产级日志与错误报告
- 使用 Bats 框架进行全面测试
- 使用 ShellCheck 静态分析与 shfmt 格式化
- 现代 Bash 5.x 特性与最佳实践
- CI/CD 集成与自动化工作流
使用方式
技能给出的操作流程为:定义脚本输入、输出与失败模式;应用严格模式与安全参数解析;用防御性模式实现核心逻辑;使用 Bats 与 ShellCheck 添加测试与检查。
安全方面要求:将输入视为不可信,避免 eval 与不安全通配;在执行破坏性操作前优先使用 dry-run 模式。
核心实践
脚本编写上,始终使用严格模式 set -Eeuo pipefail 并配合错误捕获;引用所有变量展开以防止分词与通配问题;优先使用数组与正确迭代,避免 for f in $(ls) 这类不安全模式;Bash 条件使用 [[ ]],POSIX 合规时回退到 [ ];使用 getopts 与 usage 函数实现完整参数解析;用 mktemp 与清理 trap 安全创建临时文件与目录;优先 printf 而非 echo;使用 $() 而非反引号;实现带时间戳与可配置详细度的结构化日志;设计幂等脚本并支持 dry-run;使用 shopt -s inherit_errexit 改善错误传播;使用 IFS=$'\n\t' 防止空格分词;用 : "${VAR:?message}" 校验必需环境变量;以 -- 结束选项解析并用 rm -rf -- "$dir" 安全操作;支持 --trace 模式配合 set -x;使用 xargs -0 与 NUL 边界;使用 readarray/mapfile 安全填充数组;实现稳健的脚本目录检测;使用 NUL 安全模式处理文件名。
兼容性与可移植性方面,使用 #!/usr/bin/env bash shebang;在脚本开头检查 Bash 版本;用 command -v 校验外部命令;用 uname 检测平台差异;处理 GNU 与 BSD 工具差异;在所有目标平台测试;在头部注释记录最低版本要求;为平台特定功能提供回退;尽量使用 Bash 内建;需要 POSIX 合规时避免 bashism 并记录 Bash 特有功能。
可读性与可维护性方面,使用长选项、一致命名(函数/变量 snake_case、常量 UPPER_CASE)、分节注释、函数不超过 50 行、描述性函数名、非显而易见逻辑加行内注释、一致缩进、左花括号同行、空行分隔逻辑块、头部注释记录参数与返回值、将魔法数字提取为命名常量。
安全模式方面,用 readonly 声明常量;函数变量用 local;为外部命令实现超时;操作前校验文件权限;尽量用进程替换而非临时文件;净化用户输入;用模式匹配校验数字输入;绝不对用户输入使用 eval;敏感操作设置限制性 umask;记录安全相关操作;用 -- 分隔选项与参数;使用前校验环境变量;显式检查安全关键操作的退出码;用 trap 确保异常退出时清理。
性能优化方面,避免循环中子 shell;优先 Bash 内建;批量操作;用 mapfile/readarray 填充数组;避免重复命令替换;用算术展开而非 expr;优先 printf;用关联数组查找;大文件逐行处理;独立操作可用 xargs -P 并行。
文档标准方面,实现 --help/-h 与 --version;在帮助中提供用法示例;记录所有命令行选项;区分必需与可选参数;记录退出码;列出前置条件;添加头部注释块;记录环境变量;提供故障排查;可用 shdoc 生成文档、shellman 生成 man 页;复杂脚本可用 Mermaid 或 GraphViz 绘制架构图。
现代 Bash 特性方面,涉及 Bash 5.0 的关联数组改进与 ${var@U}/${var@L},Bash 5.1 的 ${parameter@operator} 增强与兼容 shopt,Bash 5.2 的 varredir_close、exec 错误处理改进与 EPOCHREALTIME 微秒精度;使用前检查版本;${parameter@Q}、${parameter@E}、${parameter@P}、${parameter@A}(Bash 4.4+);wait -n(Bash 4.3+);mapfile -d 自定义分隔符(Bash 4.4+)。
CI/CD 集成方面,GitHub Actions 可用 shellcheck-problem-matchers 内联注解;pre-commit 配置 shellcheck、shfmt、checkbashisms;矩阵测试覆盖 Bash 4.4、5.0、5.1、5.2 与 Linux/macOS;容器测试使用官方 bash:5.2 镜像;CodeQL 扫描 Shell 脚本;actionlint 校验工作流;自动发布与变更日志;覆盖率报告。示例工作流:shellcheck *.sh && shfmt -d *.sh && bats test/。
安全扫描与加固方面,SAST 集成 Semgrep 自定义规则;用 gitleaks 或 trufflehog 检测密钥泄露;校验外部脚本校验和;在受限容器中运行不可信脚本;记录依赖与外部工具(SBOM);启用安全导向的 ShellCheck 规则;审计不必要的 root/sudo;对外部输入做白名单校验;将安全相关操作记录到 syslog;扫描脚本执行环境漏洞。
可观测性与日志方面,输出 JSON 结构化日志;实现 DEBUG、INFO、WARN、ERROR 级别;用 logger 集成 syslog;为多脚本工作流添加 trace ID;输出 Prometheus 格式指标;错误日志包含堆栈与环境信息;配置日志轮转;跟踪执行时间、资源使用与外部调用延迟。示例:log_info() { logger -t "$SCRIPT_NAME" -p user.info "$"; echo "[INFO] $" >&2; }。
输出与工具
技能产出包括:生产就绪的防御性 Bash 脚本;使用 bats-core 或 shellspec 的测试套件(TAP 输出);CI/CD 流水线配置(GitHub Actions、GitLab CI);shdoc 文档与 shellman man 页;含可复用库函数与依赖管理的项目布局;静态分析配置(.shellcheckrc、.shfmt.toml、.editorconfig);性能基准与剖析报告;安全审查与漏洞报告;调试工具;Bash 3→5 迁移指南;包分发配置(Homebrew、deb/rpm);可复现容器镜像。
常用工具包括:ShellCheck、shfmt、checkbashisms、Semgrep、CodeQL;bats-core、shellspec、shunit2、bashing;bashly、basher、bpkg、shdoc、shellman;pre-commit、actionlint、gitleaks、Makefile。
适用场景与限制
适用场景为自动化、CI/CD、运维脚本的编写与审查,以及脚本安全性与可移植性加固。限制在于:不适用于仅 POSIX shell 场景、需要更高级语言处理复杂逻辑的场景,以及 Windows 原生 PowerShell 场景。
暂未提供
该技能的收费、价格、平台支持范围、具体效果指标等事实,资料中暂未提供。