Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Master of defensive Bash scripting for production automation, CI/CD pipelines, and system utilities. Expert in safe, portable, and testable shell scripts.
.claude/skills/dokhacgiakhoa-bash-pro/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-06 | ✓→✗ | ▼ Worse | 60% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 154% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 74% | 0% |
set -Eeuo pipefail and proper error trappingfor f in $(ls)[[ ]] for Bash conditionals, fall back to [ ] for POSIX compliancegetopts and usage functionsmktemp and cleanup trapsprintf over echo for predictable output formatting$() instead of backticks for readabilityshopt -s inherit_errexit for better error propagation in Bash 4.4+IFS=$'\n\t' to prevent unwanted word splitting on spaces: "${VAR:?message}" for required environment variables-- and use rm -rf -- "$dir" for safe operations--trace mode with set -x opt-in for detailed debuggingxargs -0 with NUL boundaries for safe subprocess orchestrationreadarray/mapfile for safe array population from command outputSCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"find -print0 | while IFS= read -r -d '' file; do ...; done#!/usr/bin/env bash shebang for portability across systems(( BASH_VERSINFO[0] >= 4 && BASH_VERSINFO[1] >= 4 )) for Bash 4.4+ featurescommand -v jq &>/dev/null || exit 1case "$(uname -s)" in Linux*) ... ;; Darwin*) ... ;; esacsed -i vs sed -i '')--verbose instead of -vvalidate_input_file not check_filefunction_name() {readonly to prevent accidental modificationlocal keyword for all function variables to avoid polluting global scopetimeout for external commands: timeout 30s curl ... prevents hangs[[ -r "$file" ]] || exit 1<(command) instead of temporary files when possible[[ $num =~ ^[0-9]+$ ]]eval on user input; use arrays for dynamic command construction(umask 077; touch "$secure_file")-- to separate options from arguments: rm -rf -- "$user_input": "${REQUIRED_VAR:?not set}"trap to ensure cleanup happens even on abnormal exitwhile read instead of for i in $(cat file)[[ ]] instead of test, ${var//pattern/replacement} instead of sedsed with multiple expressions)mapfile/readarray for efficient array population from command output$(( )) instead of expr for calculationsprintf over echo for formatted output (faster and more reliable)xargs -P for parallel processing when operations are independent--help and -h flags showing usage, options, and examples--version flag displaying script version and copyright informationshdoc from special comment formatsshellman for system integration${var@U} uppercase conversion, ${var@L} lowercase${parameter@operator} transformations, compat shopt options for compatibilityvarredir_close option, improved exec error handling, EPOCHREALTIME microsecond precision[[ ${BASH_VERSINFO[0]} -ge 5 && ${BASH_VERSINFO[1]} -ge 2 ]]${parameter@Q} for shell-quoted output (Bash 4.4+)${parameter@E} for escape sequence expansion (Bash 4.4+)${parameter@P} for prompt expansion (Bash 4.4+)${parameter@A} for assignment format (Bash 4.4+)wait -n to wait for any background job (Bash 4.3+)mapfile -d delim for custom delimiters (Bash 4.4+)shellcheck-problem-matchers for inline annotations.pre-commit-config.yaml with shellcheck, shfmt, checkbashismsshellcheck *.sh && shfmt -d *.sh && bats test/gitleaks or trufflehog to prevent credential leakslogger command for system log integrationlog_info() { logger -t "$SCRIPT_NAME" -p user.info "$*"; echo "[INFO] $*" >&2; }--help and provide clear usage information| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | 21,611 | 22,315 | +3% | 1 | 1 | 0% | 4,781 | 7,413 | +55% | 0 | 0 | — |
case-01 | fail→fail | 37,439 | 50,757 | +36% | 1 | 1 | 0% | 8,242 | 9,068 | +10% | 0 | 0 | — |
case-03 | fail→pass | 32,041 | 26,296 | -18% | 1 | 1 | 0% | 5,672 | 8,448 | +49% | 0 | 0 | — |
case-04 | pass→pass | 12,751 | 20,893 | +64% | 1 | 1 | 0% | 2,613 | 6,635 | +154% | 0 | 0 | — |
case-05 | pass→pass | 20,645 | 18,982 | -8% | 1 | 1 | 0% | 3,977 | 6,909 | +74% | 0 | 0 | — |
case-06 | pass→fail | 24,006 | 25,463 | +6% | 1 | 1 | 0% | 5,288 | 8,481 | +60% | 0 | 0 | — |
case-07 | pass→pass | 16,525 | 16,942 | +3% | 1 | 1 | 0% | 2,448 | 6,525 | +167% | 0 | 0 | — |
case-08 | pass→pass | 11,369 | 16,388 | +44% | 1 | 1 | 0% | 2,029 | 5,397 | +166% | 0 | 0 | — |
case-09 | pass→pass | 17,814 | 26,947 | +51% | 1 | 1 | 0% | 3,115 | 7,163 | +130% | 0 | 0 | — |
case-10 | pass→pass | 13,804 | 21,664 | +57% | 1 | 1 | 0% | 2,495 | 6,209 | +149% | 0 | 0 | — |
case-11 | pass→pass | 11,942 | 15,573 | +30% | 1 | 1 | 0% | 2,305 | 5,780 | +151% | 0 | 0 | — |
case-12 | pass→pass | 8,070 | 8,638 | +7% | 1 | 1 | 0% | 1,526 | 4,444 | +191% | 0 | 0 | — |
case-13 | pass→pass | 8,534 | 6,884 | -19% | 1 | 1 | 0% | 1,580 | 4,091 | +159% | 0 | 0 | — |
case-14 | fail→fail | 14,987 | 20,308 | +36% | 1 | 1 | 0% | 2,858 | 6,552 | +129% | 0 | 0 | — |
case-15 | pass→pass | 19,946 | 19,537 | -2% | 1 | 1 | 0% | 2,898 | 6,346 | +119% | 0 | 0 | — |
case-16 | pass→pass | 21,164 | 17,810 | -16% | 1 | 1 | 0% | 3,051 | 6,217 | +104% | 0 | 0 | — |
case-17 | pass→pass | 13,311 | 17,949 | +35% | 1 | 1 | 0% | 2,307 | 6,181 | +168% | 0 | 0 | — |
case-18 | pass→pass | 20,631 | 22,323 | +8% | 1 | 1 | 0% | 3,889 | 6,257 | +61% | 0 | 0 | — |
case-19 | pass→pass | 17,441 | 23,636 | +36% | 1 | 1 | 0% | 2,966 | 6,607 | +123% | 0 | 0 | — |
case-20 | pass→pass | 15,082 | 33,288 | +121% | 1 | 1 | 0% | 2,975 | 8,272 | +178% | 0 | 0 | — |
case-21 | pass→pass | 18,889 | 30,417 | +61% | 1 | 1 | 0% | 3,090 | 8,914 | +188% | 0 | 0 | — |
case-22 | pass→pass | 24,932 | 22,849 | -8% | 1 | 1 | 0% | 4,743 | 7,527 | +59% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +5 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.