When a script accepts a limited set of words, a case statement can reject everything else.

Program

Play the script to choose an environment name and see whether it is allowed.

environment
enum_validation.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash

environment="dev"
case "$environment" in
    dev|test|prod) status="allowed" ;;
    *) status="unknown" ;;
esac
echo "$environment:$status"
#!/usr/bin/env bash

environment="qa"
case "$environment" in
    dev|test|prod) status="allowed" ;;
    *) status="unknown" ;;
esac
echo "$environment:$status"
  1. environment ← dev

    3environment="dev"4case "$environment" in
    values this stepdevenvironment
  2. case "$environment" in

    3environment="dev"4case "$environment" in5    dev|test|prod) status="allowed" ;;
    values this stepdevenvironment
  3. status ← allowed

    4case "$environment" in5    dev|test|prod) status="allowed" ;;6    *) status="unknown" ;;
    values this stepallowedstatus
  4. echo "$environment:$status"

    7esac8echo "$environment:$status"
    outputdev:allowed
    values this stepdevenvironmentallowedstatus
  1. environment ← qa

    3environment="qa"4case "$environment" in
    values this stepqaenvironment
  2. case "$environment" in

    3environment="qa"4case "$environment" in5    dev|test|prod) status="allowed" ;;
    values this stepqaenvironment
  3. status ← unknown

    5    dev|test|prod) status="allowed" ;;6    *) status="unknown" ;;7esac
    values this stepunknownstatus
  4. echo "$environment:$status"

    7esac8echo "$environment:$status"
    outputqa:unknown
    values this stepqaenvironmentunknownstatus
enum An enum is a small fixed set of accepted values.
case patterns `dev|test|prod` groups accepted words in one branch.
default branch `*)` catches unknown values so they do not silently pass.