| name | bash |
| description | Create, edit, and improve bash scripts with automated linting and formatting. Use when working with shell scripts (.sh files), writing bash functions, fixing script errors, or when the user asks to create or modify any bash/shell script. |
Bash
Write robust, well-formatted bash scripts with automated quality checks.
Workflow
- Before writing: Format with
shfmt -w <file> if available
- After writing: Lint with
shellcheck <file> if available
- Iterate: Fix errors, re-format if needed
Formatting with shfmt
Always format before writing if shfmt is installed:
shfmt -w script.sh
Default style (POSIX-compatible):
- Indent with tabs
- Simplify code where possible
- Add spaces around operators
Options:
-i 4 - 4-space indent instead of tabs
-ci - indent switch cases
-bn - binary operators start lines
Linting with shellcheck
Run after writing/modifying scripts:
shellcheck script.sh
Common issues to address:
- SC2086: Double quote variables to prevent globbing
- SC2034: Unused variables
- SC2164: Use
cd ... || exit for error handling
- SC2181: Check exit status directly instead of
$?
Best Practices
Shebang and Headers
#!/usr/bin/env bash
set -euo pipefail
Error Handling
if ! command -v foo &>/dev/null; then
echo "error: foo not found" >&2
exit 1
fi
cd "$DIR" || exit 1
Variables
"$VAR"
"${ARRAY[@]}"
local var="value"
: "${VAR:=default}"
Functions
my_func() {
local arg1="$1"
}
Conditionals
[[ -f "$file" ]]
[[ "$str" == *pattern* ]]
Pipes
set -o pipefail
cmd1 | cmd2