Agent skill
bash-development
This skill should be used when the user asks to "write a bash script", "create a shell script", "implement bash function", "parse arguments in bash", "handle errors in bash", or mentions bash development, shell scripting, script templates, or modern bash patterns.
Install this agent skill to your Project
npx add-skill https://github.com/Jamie-BitFlight/claude_skills/tree/main/plugins/bash-development/skills/bash-development
SKILL.md
Bash Development
Core patterns and best practices for Bash 5.1+ script development. Provides modern bash idioms, error handling, argument parsing, and pure-bash alternatives to external commands.
Script Foundation
Every script starts with the essential header:
#!/usr/bin/env bash
set -euo pipefail
set options explained:
-e- Exit immediately on command failure-u- Treat unset variables as errors-o pipefail- Pipeline fails if any command fails
Script Metadata Pattern
SCRIPT_NAME=$(basename "${BASH_SOURCE[0]}")
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
readonly SCRIPT_VERSION="1.0.0"
readonly SCRIPT_NAME SCRIPT_DIR
Error Handling
Implement trap-based error handling for robust scripts.
Code examples
Argument Parsing
Standard argument parsing template.
Code examples
Variable Best Practices
Always use curly braces and quote variables:
# Correct
"${variable}"
"${array[@]}"
# Incorrect
$variable
${array[*]} # Use [@] for proper iteration
Use readonly for constants:
readonly CONFIG_FILE="/etc/app/config"
readonly -a VALID_OPTIONS=("opt1" "opt2" "opt3")
Note: Never use readonly in sourced scripts - it causes errors on re-sourcing.
String Operations (Pure Bash)
Prefer native bash parameter expansion over external tools:
# Trim whitespace
trimmed="${string#"${string%%[![:space:]]*}"}"
trimmed="${trimmed%"${trimmed##*[![:space:]]}"}"
# Lowercase/Uppercase (Bash 4+)
lower="${string,,}"
upper="${string^^}"
# Substring extraction
substring="${string:0:10}" # First 10 chars
suffix="${string: -5}" # Last 5 chars
# Replace patterns
replaced="${string//old/new}" # Replace all
replaced="${string/old/new}" # Replace first
# Strip prefix/suffix
no_prefix="${string#prefix}" # Shortest match
no_prefix="${string##*/}" # Longest match (basename)
no_suffix="${string%suffix}" # Shortest match
no_suffix="${string%%/*}" # Longest match
Array Operations
# Declaration
declare -a indexed_array=()
declare -A assoc_array=()
# Safe iteration with nullglob
shopt -s nullglob
for file in *.txt; do
process "${file}"
done
shopt -u nullglob
# Array length
length="${#array[@]}"
# Append element
array+=("new_element")
# Iterate with index
for i in "${!array[@]}"; do
printf '%d: %s\n' "${i}" "${array[i]}"
done
File Operations
# Read file to string
content="$(<"${file}")"
# Read file to array (Bash 4+)
mapfile -t lines < "${file}"
# Check file conditions
[[ -f "${file}" ]] # Regular file exists
[[ -d "${dir}" ]] # Directory exists
[[ -r "${file}" ]] # Readable
[[ -w "${file}" ]] # Writable
[[ -x "${file}" ]] # Executable
[[ -s "${file}" ]] # Non-empty
# Safe temp file creation
temp_file=$(mktemp)
trap 'rm -f "${temp_file}"' EXIT
Conditional Expressions
Use [[ ]] for conditionals (bash-specific, more powerful):
# String comparisons
[[ "${var}" == "value" ]] # Equality
[[ "${var}" == pattern* ]] # Glob matching
[[ "${var}" =~ ^regex$ ]] # Regex matching
# Numeric comparisons
(( num > 10 )) # Arithmetic comparison
[[ "${num}" -gt 10 ]] # Traditional syntax
# Compound conditions
[[ -f "${file}" && -r "${file}" ]]
[[ "${opt}" == "a" || "${opt}" == "b" ]]
Utility Functions
Code examples
Performance Guidelines
- Use builtins over external commands when possible
- Batch operations instead of loops for large datasets
- Use
printfoverechofor portability and control - Avoid unnecessary subshells in tight loops
- Use
[[ ]]over[ ]for string comparisons
Additional Resources
Reference Files
For detailed patterns and examples:
- bash_example_file.sh - Complete script template
- bash_example_includes.bash - Reusable utility functions
- bash-agent-notes.markdown - Context-aware review guidance
- pure-bash-bible-strings.md - String manipulation patterns
- pure-bash-bible-arrays.md - Array operations
- pure-bash-bible-files.md - File handling patterns
- pure-bash-bible-variables.md - Parameter expansion reference
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
ccc
This skill should be used when code search is needed (whether explicitly requested or as part of completing a task), when indexing the codebase after changes, or when the user asks about ccc, cocoindex-code, or the codebase index. Trigger phrases include 'search the codebase', 'find code related to', 'update the index', 'ccc', 'cocoindex-code'.
agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.
delegate
Quick delegation template for sub-agent prompts. Use when assigning work to a sub-agent, before invoking the Agent tool, or when preparing prompts for specialized agents. Provides the WHERE-WHAT-WHY framework. For comprehensive delegation guidance, activate the agent-orchestration how-to-delegate skill.
swarm-spawning
Spawn agents and teammates in Claude Code swarms. Use when choosing between subagents vs teammates, selecting agent types (Explore, Plan, general-purpose, plugin agents), configuring spawn backends (in-process, tmux, iterm2), or setting environment variables for spawned agents.
knowledge-explorer
Manage the research/ knowledge base (KB) of tool and library research entries. Use when browsing KB topics, adding new research entries, updating existing entries with dated revisions, fetching GitHub repo metadata into a draft KB entry, or migrating old-format entries to skill-spec frontmatter. Triggers on tasks like "what do we have on X", "add this to the KB", "update the KB entry for Y", "fetch github info for owner/repo", or "migrate old entries".
design-anti-patterns
Enforce anti-AI UI design rules based on the Uncodixfy methodology. Use when generating HTML, CSS, React, Vue, Svelte, or any frontend UI code. Prevents "Codex UI" — the generic AI aesthetic of soft gradients, floating panels, oversized rounded corners, glassmorphism, hero sections in dashboards, and decorative copy. Applies constraints from Linear/Raycast/Stripe/GitHub design philosophy: functional, honest, human-designed interfaces. Triggers on: UI generation, dashboard building, frontend component creation, CSS styling, landing page design, or any task producing visual interface code.
Didn't find tool you were looking for?