Bash Helper Functions

(, en)

Frequently used in CI/CD pipelines:

to_lower() {
  tr '[:upper:]' '[:lower:]'
}

to_upper() {
  tr '[:lower:]' '[:upper:]'
}

to_alnum() {
  tr -dc '[:alnum:]'
}

snake_uc_to_camel() {
  to_lower | sed -r 's/_([a-z0-9])/\U\1/g'
}

camel_to_snake_uc() {
  sed 's/\([a-z0-9]\)\([A-Z]\)/\1_\2/g' | to_upper
}

confirm() {
  # https://stackoverflow.com/questions/1885525/how-do-i-prompt-a-user-for-confirmation-in-bash-script
  read -p "${1:-Are you sure?} (y/n) " -n 1 -r
  echo    # (optional) move to a new line
  if [[ $REPLY =~ ^[Yy]$ ]]; then
    return 0
  fi
  return 1
}

confirm_or_exit() {
  if ! confirm "$@"; then
    exit 0
  fi
}

check_env_var_presence() {
  : "${VARIABLE1?'not set'}"
  : "${VARIABLE2?'not set'}"

  if [[ ! "$ENV" =~ ^(dev|acc|prd)$ ]]; then
    echo "ENV needs to be one of dev, acc or prd, but not $ENV"
    exit 1
  fi
}

GIT_COMMIT_SHA="e4637392ae6a3fad3ec16d1e5a9b40657990d76b"
GIT_COMMIT_SHA_SHORT=${GIT_COMMIT_SHA:0:7}
+--------------------+----------------------+-----------------+-----------------+
|   Expression       |       parameter      |     parameter   |    parameter    |
|   in script:       |   Set and Not Null   |   Set But Null  |      Unset      |
+--------------------+----------------------+-----------------+-----------------+
| ${parameter:-word} | substitute parameter | substitute word | substitute word |
| ${parameter-word}  | substitute parameter | substitute null | substitute word |
| ${parameter:=word} | substitute parameter | assign word     | assign word     |
| ${parameter=word}  | substitute parameter | substitute null | assign word     |
| ${parameter:?word} | substitute parameter | error, exit     | error, exit     |
| ${parameter?word}  | substitute parameter | substitute null | error, exit     |
| ${parameter:+word} | substitute word      | substitute null | substitute null |
| ${parameter+word}  | substitute word      | substitute word | substitute null |
+--------------------+----------------------+-----------------+-----------------+

Source

See also