技能 bash-defensive-patterns
🛡️

bash-defensive-patterns

安全

Написание надежных Bash-скриптов

也可从以下获取: wshobson

Предотвратите распространённые ошибки в shell-скриптах с помощью паттернов защищённого программирования. Этот навык предоставляет готовые к продакшену шаблоны для обработки ошибок, валидации входных данных и безопасных операций с файлами, которые защищают вашу автоматизацию от граничных случаев и неожиданных сбоев.

支持: Claude Codex Code(CC)
🥉 72 青铜
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“bash-defensive-patterns”。 Create a script that rotates log files older than 7 days with error handling

预期结果:

Скрипт будет включать: конфигурацию строгого режима (set -Eeuo pipefail), валидацию директории логов, команду find с правильной обработкой ошибок, создание сжатого архива, атомарные операции с файлами, ловушки очистки для временных файлов и структурированное логирование, показывающее прогресс ротации и любые возникшие ошибки.

正在使用“bash-defensive-patterns”。 Build a deployment script with rollback capability

预期结果:

Сгенерированный скрипт включает: парсинг аргументов для флагов окружения и версии, предварительные проверки зависимостей, создание резервной копии текущего развёртывания перед изменениями, атомарное переключение через symlink для развёртывания без простоя, функцию отката для восстановления из резервной копии, комплексное логирование на каждом шаге и обработчики ошибок, которые автоматически запускают откат при сбое.

正在使用“bash-defensive-patterns”。 Write a script that monitors processes and sends alerts

预期结果:

Скрипт мониторинга включает: проверку состояния процессов через kill -0, настраиваемый список имён процессов, конфигурацию пороговых значений оповещений, логику повторных попыток с экспоненциальной задержкой, заглушки функций уведомлений (email/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

质量评分

38
架构
100
可维护性
87
内容
32
社区
100
安全
100
规范符合性

你能构建什么

Скрипты для DevOps-пайплайнов

Создавайте скрипты CI/CD-пайплайнов с правильной обработкой ошибок, логированием и идемпотентными операциями, которые безопасно завершаются и предоставляют понятные сообщения об ошибках.

Утилиты системного администрирования

Создавайте скрипты обслуживания, которые обрабатывают граничные случаи, валидируют входные данные и включают обработчики очистки для предотвращения повреждения системы при сбоях автоматизации.

Скрипты инструментов разработки

Пишите инструменты повышения производительности разработчика с парсингом аргументов, поддержкой dry-run и комплексным логированием для отладки проблем в продакшене.

试试这些提示

Базовый безопасный скрипт
Create a Bash script that backs up a directory to a backup location. Use strict mode, error trapping, and validate that both directories exist before proceeding.
CLI-инструмент для продакшена
Write a Bash script that accepts input/output file arguments with --input and --output flags. Include argument validation, help text, structured logging, and support dry-run mode.
Скрипт управления процессами
Create a Bash script that manages background processes with signal handlers for graceful shutdown. Track PIDs, implement cleanup traps, and handle SIGTERM/SIGINT properly.
Идемпотентный скрипт настройки
Write a Bash setup script that creates directories, config files, and services. Design it to be idempotent - safe to run multiple times without causing duplicate resources or errors.

最佳实践

  • Всегда включайте строгий режим с 'set -Eeuo pipefail' в начале скриптов для раннего обнаружения ошибок
  • Заключайте все расширения переменных в кавычки для предотвращения проблем с разбиением слов и globbing
  • Используйте [[ ]] вместо [ ] для условных выражений, чтобы включить более безопасное сопоставление с образцом и предотвратить неожиданное разбиение слов

避免

  • Не используйте незаключённые в кавычки переменные, например '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-скриптов?
Идемпотентность означает, что скрипт производит одинаковый результат при однократном или многократном запуске. Это критически важно для надёжности — если скрипт завершится с ошибкой на полпути и будет перезапущен, он не должен создавать дублирующие ресурсы, завершаться с ошибкой на существующих элементах или оставлять систему в несогласованном состоянии.