Skip to content

rodrigobdz/styleguide-sh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

rodrigobdz's Shell Style Guide

Opinionated guide on how to organize scripts and which rules to follow while writing them.

Motivation

Usage

File Naming Convention

We follow a modified version of github/scripts-to-rule-them-all:

  • utils.sh - shared functions and variables
  • script/bootstrap - installs all dependencies
  • script/setup - sets up a project to be used for the first time
  • script/update - updates a project to run at its current version
  • script/build - builds package
  • script/up - starts app
  • script/test - runs tests
  • script/console - opens a console for your application.
  • script/cibuild - invoked by continuous integration servers to run tests

If script targets a specific OS version, add it to the filename after a hyphen. We like hyphens.

Example: script/bootstrap-mac or script/bootstrap-centos

File Extensions

Executables should have no extension.

Libraries must have a .sh extension and should not be executable.

Source: Google's Shell Style Guide

Code Style

  • Google Shell Style Guide - Set of best practices, additional to linter use.

    Only modifications are:

    • Shebang: #!/usr/bin/env bash

    • Shell Options:

      shopt -s inherit_errexit
      set -o errexit # Abort script at first error
      set -o pipefail # Return last non-zero status in pipeline
      set -o nounset # Exit if any variable is undefined
      # Optional
      set -o verbose # Print commands before executing them
    • Source Filenames: We prefer hyphens instead of underscores.

  • ShellCheck - Linter

Example

#!/usr/bin/env bash
#
# Install all project dependencies.

shopt -s inherit_errexit
set -o errexit
set -o pipefail
set -o nounset

License

MIT © rodrigobdz