Skip to content

Instantly share code, notes, and snippets.

@sheeeng
Last active November 13, 2023 11:30
Show Gist options
  • Save sheeeng/dc253d56f1f1b5c9cb5fc14b93adb271 to your computer and use it in GitHub Desktop.
Save sheeeng/dc253d56f1f1b5c9cb5fc14b93adb271 to your computer and use it in GitHub Desktop.
Bash script example template.
#!/usr/bin/env bash
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
set -o pipefail
set -o errexit # set -e
set -o nounset # set -u
set -o xtrace # set -x
# https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
shopt -s inherit_errexit
GIT_ROOT_DIRECTORY="$(git rev-parse --show-toplevel)"
SCRIPT_DIRECTORY="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
# ----------------------------------------------------------------------
# https://stackoverflow.com/a/31397073
# mktemp --directory "${TMPDIR:-/tmp}/zombie.XXXXXXXXX"
TEMPORARY_DIRECTORY="$(mktemp --directory --tmpdir=${PWD})"
function cleanUp {
rm \
--recursive \
--verbose \
"${TEMPORARY_DIRECTORY}"
}
trap cleanUp EXIT
# ----------------------------------------------------------------------
BG_BLACK=$(tput setab 0)
export BG_BLACK
BG_RED=$(tput setab 1)
export BG_RED
BG_GREEN=$(tput setab 2)
export BG_GREEN
BG_YELLOW=$(tput setab 3)
export BG_YELLOW
BG_BLUE=$(tput setab 4)
export BG_BLUE
BG_MAGENTA=$(tput setab 5)
export BG_MAGENTA
BG_CYAN=$(tput setab 6)
export BG_CYAN
BG_WHITE=$(tput setab 7)
export BG_WHITE
FG_BLACK=$(tput setaf 0)
export FG_BLACK
FG_RED=$(tput setaf 1)
export FG_RED
FG_GREEN=$(tput setaf 2)
export FG_GREEN
FG_YELLOW=$(tput setaf 3)
export FG_YELLOW
FG_BLUE=$(tput setaf 4)
export FG_BLUE
FG_MAGENTA=$(tput setaf 5)
export FG_MAGENTA
FG_CYAN=$(tput setaf 6)
export FG_CYAN
FG_WHITE=$(tput setaf 7)
export FG_WHITE
TX_BOLD=$(tput bold)
export TX_BOLD
TX_DIM=$(tput dim) || true
export TX_DIM
TX_UNDERLINE=$(tput smul)
export TX_UNDERLINE
TX_END_UNDERLINE=$(tput rmul)
export TX_END_UNDERLINE
TX_REVERSE=$(tput rev)
export TX_REVERSE
TX_STANDOUT=$(tput smso)
export TX_STANDOUT
TX_END_STANDOUT=$(tput rmso)
export TX_END_STANDOUT
TX_RESET=$(tput sgr0)
export TX_RESET
# ----------------------------------------------------------------------
FOREGROUND_BLACK='\e[0;30m %s \e[0m \n'
export FOREGROUND_BLACK
FOREGROUND_RED='\e[0;31m%s\e[0m\n'
export FOREGROUND_RED
FOREGROUND_GREEN='\e[0;32m%s\e[0m\n'
export FOREGROUND_GREEN
FOREGROUND_YELLOW='\e[0;33m%s\e[0m\n'
export FOREGROUND_YELLOW
FOREGROUND_BLUE='\e[0;34m%s\e[0m\n'
export FOREGROUND_BLUE
FOREGROUND_MAGENTA='\e[0;35m%s\e[0m\n'
export FOREGROUND_MAGENTA
FOREGROUND_CYAN='\e[0;36m%s\e[0m\n'
export FOREGROUND_CYAN
FOREGROUND_WHITE='\e[0;37m%s\e[0m\n'
export FOREGROUND_WHITE
BOLD_BLACK='\e[1;30m%s\e[0m\n'
export BOLD_BLACK
BOLD_RED='\e[1;31m%s\e[0m\n'
export BOLD_RED
BOLD_GREEN='\e[1;32m%s\e[0m\n'
export BOLD_GREEN
BOLD_YELLOW='\e[1;33m%s\e[0m\n'
export BOLD_YELLOW
BOLD_BLUE='\e[1;34m%s\e[0m\n'
export BOLD_BLUE
BOLD_MAGENTA='\e[1;35m%s\e[0m\n'
export BOLD_MAGENTA
BOLD_CYAN='\e[1;36m%s\e[0m\n'
export BOLD_CYAN
BOLD_WHITE='\e[1;37m%s\e[0m\n'
export BOLD_WHITE
UNDERLINE_BLACK='\e[4;30m%s\e[0m\n'
export UNDERLINE_BLACK
UNDERLINE_RED='\e[4;31m%s\e[0m\n'
export UNDERLINE_RED
UNDERLINE_GREEN='\e[4;32m%s\e[0m\n'
export UNDERLINE_GREEN
UNDERLINE_YELLOW='\e[4;33m%s\e[0m\n'
export UNDERLINE_YELLOW
UNDERLINE_BLUE='\e[4;34m%s\e[0m\n'
export UNDERLINE_BLUE
UNDERLINE_MAGENTA='\e[4;35m%s\e[0m\n'
export UNDERLINE_MAGENTA
UNDERLINE_CYAN='\e[4;36m%s\e[0m\n'
export UNDERLINE_CYAN
UNDERLINE_WHITE='\e[4;37m%s\e[0m\n'
export UNDERLINE_WHITE
BACKGROUND_BLACK="\[\033[40m\]"
export BACKGROUND_BLACK
BACKGROUND_RED="\[\033[41m\]"
export BACKGROUND_RED
BACKGROUND_GREEN="\[\033[42m\]"
export BACKGROUND_GREEN
BACKGROUND_YELLOW="\[\033[43m\]"
export BACKGROUND_YELLOW
BACKGROUND_BLUE="\[\033[44m\]"
export BACKGROUND_BLUE
BACKGROUND_PURPLE="\[\033[45m\]"
export BACKGROUND_PURPLE
BACKGROUND_CYAN="\[\033[46m\]"
export BACKGROUND_CYAN
BACKGROUND_WHITE="\[\033[47m\]"
export BACKGROUND_WHITE
# ----------------------------------------------------------------------
confirmPrompt() {
while true; do
read -r -n 1 -p "${1:-Continue?} [y/N]: " REPLY
case $REPLY in
[yY])
echo
return 0
;;
[nN])
echo
return 1
;;
*) return 1 ;; # printf " \033[31m %s \n\033[0m" "Enter Y, y, N, or n as valid option."
esac
done
}
# ----------------------------------------------------------------------
printSeparatorLine() {
local columnWidth="${1:-72}"
for ((i = 1; i <= columnWidth; i++)); do
printf "${FG_MAGENTA}%s${TX_RESET}" '-'
if [[ "${i}" -ge "${columnWidth}" ]]; then echo; fi
done
}
# ----------------------------------------------------------------------
printSeparatorLine
cd "${TEMPORARY_DIRECTORY}"
mkdir --parents {alpha,beta,gamma}
for directory in ${TEMPORARY_DIRECTORY}/*; do
echo $directory
cd $directory
cd ${SCRIPT_DIRECTORY}
# read -p "Press enter to continue."
done
cd "${SCRIPT_DIRECTORY}"
printSeparatorLine
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment