المهارات bash-defensive-patterns
🛡️

bash-defensive-patterns

آمن

编写健壮的Bash脚本

متاح أيضًا من: wshobson

使用防御性编程模式防止常见的shell脚本故障。此技能提供生产就绪的模板,用于错误处理、输入验证和安全文件操作,保护您的自动化脚本免受边缘情况和意外故障的影响。

يدعم: Claude Codex Code(CC)
1

تنزيل ZIP المهارة

2

رفع في Claude

اذهب إلى Settings → Capabilities → Skills → Upload skill

3

فعّل وابدأ الاستخدام

اختبرها

استخدام "bash-defensive-patterns". 创建一个轮转超过7天的日志文件的脚本,带有错误处理

النتيجة المتوقعة:

脚本将包括:严格模式配置(set -Eeuo pipefail)、日志目录验证、带正确错误处理的find命令、压缩归档创建、原子文件操作、临时文件的清理陷阱,以及显示轮转进度和遇到任何错误的结构化日志。

استخدام "bash-defensive-patterns". 构建具有回滚功能的部署脚本

النتيجة المتوقعة:

生成的脚本特性:用于环境和版本标志的参数解析、预检查依赖项、在更改前创建当前部署的备份、用于零停机部署的原子符号链接切换、从备份恢复的回滚函数、每步的全面日志,以及在失败时自动触发回滚的错误处理程序。

استخدام "bash-defensive-patterns". 编写一个监控进程并发送警报的脚本

النتيجة المتوقعة:

监控脚本包括:使用kill -0的进程健康检查、可配置的进程名称列表、警报阈值配置、带指数退避的重试逻辑、通知函数占位符(电子邮件/slack)、用于优雅关闭的信号处理、带PID数组的后台进程跟踪,以及用于审计跟踪的带时间戳的结构化日志。

التدقيق الأمني

آمن
v1 • 2/25/2026

All 106 static findings are false positives. The skill contains only markdown documentation with code examples demonstrating defensive Bash programming techniques. Command execution patterns, cryptographic references, and file operations are educational examples showing SAFE practices, not executable code. No prompt injection or malicious intent detected.

2
الملفات التي تم فحصها
564
الأسطر التي تم تحليلها
0
النتائج
1
إجمالي عمليات التدقيق
لا توجد مشكلات أمنية
تم تدقيقه بواسطة: claude

ماذا يمكنك بناءه

DevOps流水线脚本

创建具有正确错误处理、日志记录和幂等操作的CI/CD流水线脚本,这些脚本能够安全失败并提供清晰的错误消息。

系统管理工具

构建处理边缘情况、验证输入并包含清理处理程序的维护脚本,以防止自动化故障导致系统损坏。

开发工具脚本

编写具有参数解析、试运行支持和全面日志记录的开发人员生产力工具,用于调试生产问题。

جرّب هذه الموجهات

基本安全脚本
创建一个将目录备份到备份位置的Bash脚本。使用严格模式、错误捕获,并验证两个目录在继续之前都存在。
生产级CLI工具
编写一个接受输入/输出文件参数的Bash脚本,带有--input和--output标志。包括参数验证、帮助文本、结构化日志,并支持试运行模式。
进程管理脚本
创建一个用于管理后台进程的Bash脚本,带有用于优雅关闭的信号处理器。跟踪PID,实现清理陷阱,并正确处理SIGTERM/SIGINT。
幂等设置脚本
编写一个创建目录、配置文件和服务的Bash设置脚本。设计为幂等 - 可以安全地多次运行而不会导致重复资源或错误。

أفضل الممارسات

  • 始终在脚本开头启用严格模式'set -Eeuo pipefail',以便及早捕获错误
  • 引用所有变量展开以防止单词拆分和通配符问题
  • 使用[[ ]]代替[ ]进行条件判断,以启用更安全的模式匹配并防止意外的单词拆分

تجنب

  • 不要使用未引用的变量如'cp $source $dest' - 这会在带空格的文件名上导致单词拆分
  • 避免使用反引号进行命令替换 - 优先使用现代的'$()'语法以获得更好的嵌套和可读性
  • 永远不要单独使用'set -e'而不理解pipefail - 始终一起使用'set -Eeuo pipefail'以实现完整的错误处理

الأسئلة المتكررة

为什么此技能在严格模式会使脚本退出错误时仍推荐使用严格模式?
严格模式可以防止小错误变成更大的问题。它会在命令失败、变量未定义或管道破裂时立即停止执行,使调试变得更加容易,并防止在状态不良时继续运行而导致数据损坏。
我可以将这些模式与POSIX sh一起使用而不是Bash吗?
许多模式(如引用变量和错误捕获)在POSIX sh中工作,但某些Bash特定功能如[[ ]]条件判断和数组需要Bash 4.0+。为了严格的POSIX兼容性,请使用[ ]代替[[ ] ]并避免使用数组。
条件判断中[ ]和[[ ]]有什么区别?
双括号[[ ]]是Bash特有的,提供更安全的特殊字符处理,防止单词拆分,并支持使用==进行模式匹配和使用=~进行正则匹配。单括号[ ]是POSIX标准的,但需要更多引号,且行为不那么直观。
为什么我应该使用'command -v'而不是'which'来检查命令?
'command -v'内建命令是POSIX标准的,在所有shell中一致工作,不需要外部进程。'which'命令并非在所有系统上都可用,并且可能根据操作系统的不同产生不一致的输出。
如何处理应该是非致命的脚本失败?
在可能合法失败的命令后使用'|| true',或者将命令包装在if语句中以显式检查其退出状态。对于更复杂的逻辑,您可以使用'set +e'在特定代码块中暂时禁用严格模式,然后使用'set -e'重新启用它。
什么是幂等性,为什么它对shell脚本很重要?
幂等性意味着脚本无论运行一次还是多次都产生相同的结果。这对可靠性至关重要 - 如果脚本在中间失败并重新运行,它不应该创建重复资源、在现有项目上失败,或使系统处于不一致的状态。

تفاصيل المطور

بنية الملفات