My coworkers use many ad hoc or single-purpose scripts, things like: checking system status, wrappers for build systems, launching services locally, etc.  My UNIX background tells me, "keep it simple, avoid output; Silence is Golden."
 Somehow my younger colleagues aren't impressed.
 So to avoid acting my age I started sprinkling color into my scripts, and it worked.  Feedback was uniformly positive.  And true to my UNIX roots, I provided command line flags to disable color.
 Some lessons for budding BASHers:
  - Yes, experiment and learn, but be sure to do your research.  The Internet has outstanding help for BASH.
- Learn standard idioms (see below).
- Don't overdo it.  Color for summary lines and warnings have more impact when the rest of the text is plain.
- Keep functions small, just as you would in other languages.  BASH is a programming language with a command line, so keep your good habits when writing shell.
- Collaborate, pair!  This comes naturally to my fellows.  Coding is more enjoyable, goes faster and has fewer bugs.
Idioms
 Most of these idioms appear in testing with bash, a simple BASH BDD test framework I wrote for demonstration.
 Process command-line flags
 this=false
that=true
while getopts :htT-: opt
do
    [[ - == $opt ]] && opt="${OPTARG%%=*}" OPTARG="${OPTARG#*=}"
    case $opt in
    h | help ) print_help ; exit 0 ;;
    t | this ) this=true ;;
    T | no-that ) that=false ;;
    esac
done
shift $((OPTIND - 1)) Keep boolean toggles simple
 run_faster=true
if $run_faster
then
    use_faster_algorithm "$@"
else
    use_more_correct_algorithm "$@"
fi Simple coloring
 pgreen="\e[32m"
pred="\e[31m"
preset="\e0m"
if $success
then
    echo -e "${pgreen}PASS${preset} $test_name"
else
    echo -e "${pred}FAIL${preset} $test_name - $failure_reason"
EOM
fi Consistent exit codes
 function check_it {
    local -r failed=$1
    local -r syntax_error=$2
    if $syntax_error
    then
        return 2
    elif $failed
    then
        return 1
    else
        return 0
    fi
} Coda
 There are many more idioms to learn, hopefully this taste catches your interest.  I was careful to include others mixed in with these (what does local -r do?) to whet the appetite for research.  Go try the BASH debugger sometime.
 UPDATE: Fixed thinko.  ANSI escape codes need to be handled by echo -e or printf, not sent directly via cat!