Claude-skill-registry bash-script
Write robust bash scripts with proper error handling. Use when the user says "write a script", "bash script", "shell script", "automate this", "create a backup script", or asks to script a task.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/bash-script" ~/.claude/skills/majiayu000-claude-skill-registry-bash-script && rm -rf "$T"
manifest:
skills/data/bash-script/SKILL.mdsource content
Bash Script
Write robust, maintainable bash scripts with proper error handling.
Instructions
- Understand the task requirements
- Design the script structure
- Write with safety options and error handling
- Test and validate
Script template
#!/usr/bin/env bash set -euo pipefail IFS=$'\n\t' # Description: Brief description of what this script does # Usage: ./script.sh [options] <args> readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" readonly SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")" # Default values VERBOSE="${VERBOSE:-false}" usage() { cat <<EOF Usage: ${SCRIPT_NAME} [OPTIONS] <argument> Description of what the script does. Options: -h, --help Show this help message -v, --verbose Enable verbose output Examples: ${SCRIPT_NAME} input.txt ${SCRIPT_NAME} --verbose /path/to/file EOF } log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*" >&2 } error() { log "ERROR: $*" exit 1 } cleanup() { # Remove temp files, restore state, etc. rm -f "${TEMP_FILE:-}" } trap cleanup EXIT main() { # Parse arguments while [[ $# -gt 0 ]]; do case "$1" in -h|--help) usage; exit 0 ;; -v|--verbose) VERBOSE=true; shift ;; --) shift; break ;; -*) error "Unknown option: $1" ;; *) break ;; esac done [[ $# -lt 1 ]] && { usage; exit 1; } local input="$1" [[ -f "$input" ]] || error "File not found: $input" # Main logic here log "Processing $input" } main "$@"
Safety options explained
| Option | Purpose |
|---|---|
| Exit on error |
| Error on undefined variables |
| Pipeline fails if any command fails |
| Safer word splitting |
Best practices
- MUST use
at script startset -euo pipefail - MUST quote all variables:
not"$var"$var - MUST use
for conditionals (not[[
)[ - MUST use
for command substitution (not backticks)$() - Use
for constantsreadonly - Use
for function variableslocal - Use
for cleanuptrap - Use
for temp filesmktemp
Common patterns
# Check if command exists command -v docker &>/dev/null || error "docker not found" # Default value name="${1:-default}" # Read file line by line while IFS= read -r line; do echo "$line" done < "$file" # Process arguments for arg in "$@"; do echo "$arg" done # Temp file with cleanup TEMP_FILE="$(mktemp)" trap 'rm -f "$TEMP_FILE"' EXIT
Rules
- MUST include
set -euo pipefail - MUST quote all variable expansions
- MUST include usage function for scripts with arguments
- MUST use trap for cleanup of temp files
- Never use
with user inputeval - Never assume current directory
- Always use absolute paths for cron scripts