- The code must use only
bash
built-ins.- A fallback to an external program is allowed if the code doesn't always work.
- Example Fallback:
${HOSTNAME:-$(hostname)}
- If possible, wrap the code in a function.
- This allows tests to be written.
- It also allows
shellcheck
to properly lint it. - An added bonus is showing a working use-case.
- Write some examples.
- Show some input and the modified output.
Use sh
for functions that should be linted and unit tested.
```sh
# Shellcheck will lint this and the test script will source this.
func() {
# Usage: func "arg"
:
}
```
Use shell
for code that should be ignored.
```shell
# Shorter file creation syntax.
:>file
```
The test file is viewable here: https://github.com/dylanaraps/pure-bash-bible/blob/master/test.sh
Example test:
test_upper() {
result="$(upper "HeLlO")"
assert_equals "$result" "HELLO"
}
Steps:
- Write the test.
- Naming is
test_func_name
- Store the function output in a variable (
$result
or${result[@]}
). - Use
assert_equals
to test equality between the variable and the expected output.
- Naming is
- The test script will automatically execute it. 👍
Running test.sh
also runs shellcheck
on the code.
cd pure-bash-bible
./test.sh