#!/bin/sh __log_lvl=1 __log_get_lvl() { case ${1:-$__log_lvl} in 0) echo debug ;; 1) echo info ;; 2) echo warn ;; 3) echo err ;; 4) echo fatal ;; esac } __log() { [ $1 -ge $__log_lvl ] || return level=$(__log_get_lvl $1) shift printf "[%s] %s\n" "$level" "$@" } debug() { __log 0 "$@" } info() { __log 1 "$@" } warn() { __log 2 "$@" } err() { __log 3 "$@" } fatal() { while getopts "e:" opt; do case $opt in e) exitnum=$OPTARG ;; esac done shift $((OPTIND-1)) __log 4 "$@" exit ${exitnum:-1} }