# Writing Bash Scripts

> Create and refactor Bash scripts following conventions (strict mode, fct_ naming, quoting). Includes shellcheck linting. Use when creating shell scripts, refactoring existing scripts, debugging shell errors, or linting scripts.

- Skill: `archibate/writing-bash-scripts` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add archibate/writing-bash-scripts`
- Raw SKILL.md: https://api.skillmd.com/api/skills/archibate/writing-bash-scripts/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: archibate (https://skillmd.com/u/archibate)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/archibate/writing-bash-scripts

---


# Bash

Use this skill whenever the user asks to create/update/refactor a Bash script (`.sh`) or lint shell scripts.

## Defaults

- Shebang: `#!/usr/bin/env bash`
- Strict mode: `set -Eeuo pipefail`
- Functions: `fct_<descriptive_snake_case>() { ... }`
- Variables: quote expansions like `"${var}"`, prefer `printf`, use `readonly` for constants and `local` inside functions

## Workflow

### Creating/Refactoring Scripts

1. Copy `scripts/pref_bash_script_template.sh` to the target path and rename it.
2. Update the SCRIPT INFO / USAGE header blocks.
3. Implement behavior in `fct_execute_this`, keep `fct_main` + `trap` structure.
4. Follow the detailed conventions in `references/pref_bash.md`.
5. Run shellcheck linting (see below).

### Linting Scripts

Run shellcheck on scripts using the provided wrapper:

```bash
# Lint all scripts in scripts/ directory (default)
.opencode/skill/bash/scripts/run_shellck.sh

# Lint specific files or directories
.opencode/skill/bash/scripts/run_shellck.sh path/to/script.sh
.opencode/skill/bash/scripts/run_shellck.sh scripts/ other/dir/
```

The linting script:

- Automatically detects shell scripts by extension (`.sh`, `.bash`, `.zsh`) or shebang
- Exits non-zero on shellcheck failures
- Defaults to scanning `scripts/` when no arguments provided

See `references/pref_bash.md` section 14 for shellcheck integration details.

