Claude-skill-registry bash
Write Bash scripts following best practices. Use when creating shell scripts, automation, or CLI tools. Covers safe scripting patterns.
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-dralgorhythm-claude-agentic-frame" ~/.claude/skills/majiayu000-claude-skill-registry-bash && rm -rf "$T"
manifest:
skills/data/bash-dralgorhythm-claude-agentic-frame/SKILL.mdsource content
Bash Scripting
Script Template
#!/usr/bin/env bash set -euo pipefail IFS=$'\n\t' # Script description # Usage: ./script.sh <arg1> <arg2> readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" main() { local arg1="${1:-default}" # Script logic here echo "Running with: $arg1" } main "$@"
Safety Settings
set -e # Exit on error set -u # Error on undefined variables set -o pipefail # Catch pipe failures set -x # Debug: print commands
Variables
# Declaration readonly CONST="immutable" local var="function scoped" # Default values name="${1:-default}" # Use default if unset name="${1:?Error: missing}" # Error if unset # String operations "${var^^}" # Uppercase "${var,,}" # Lowercase "${var#prefix}" # Remove prefix "${var%suffix}" # Remove suffix
Conditionals
# File tests [[ -f "$file" ]] # Is file [[ -d "$dir" ]] # Is directory [[ -r "$file" ]] # Is readable [[ -x "$file" ]] # Is executable # String tests [[ -z "$var" ]] # Is empty [[ -n "$var" ]] # Is not empty [[ "$a" == "$b" ]] # Equals # Numeric tests (( num > 5 )) # Greater than (( num == 5 )) # Equals
Functions
log() { local level="$1" local message="$2" echo "[$(date +'%Y-%m-%d %H:%M:%S')] [$level] $message" >&2 } die() { log "ERROR" "$1" exit 1 } require_command() { command -v "$1" >/dev/null 2>&1 || die "Required command not found: $1" }
Error Handling
# Trap for cleanup cleanup() { rm -rf "$TMP_DIR" } trap cleanup EXIT # Catch errors if ! result=$(some_command 2>&1); then die "Command failed: $result" fi
Loops
# For loop for item in "${array[@]}"; do echo "$item" done # While read while IFS= read -r line; do echo "$line" done < file.txt # Process substitution while read -r line; do echo "$line" done < <(command)
Best Practices
- Quote all variables:
"$var" - Use
instead of[[[ - Use
in functionslocal - Use
for constantsreadonly - Always use
set -euo pipefail - Use shellcheck for linting