Scripts often choose different cleanup behavior for different signals. A case statement keeps those routes explicit.

Program

Play the script to choose a signal name and see the action a script would plan for it.

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

signal="TERM"
case "$signal" in
    INT) action="stop-from-keyboard" ;;
    TERM) action="graceful-shutdown" ;;
    HUP) action="reload-config" ;;
esac
echo "$signal:$action"
#!/usr/bin/env bash

signal="INT"
case "$signal" in
    INT) action="stop-from-keyboard" ;;
    TERM) action="graceful-shutdown" ;;
    HUP) action="reload-config" ;;
esac
echo "$signal:$action"
#!/usr/bin/env bash

signal="HUP"
case "$signal" in
    INT) action="stop-from-keyboard" ;;
    TERM) action="graceful-shutdown" ;;
    HUP) action="reload-config" ;;
esac
echo "$signal:$action"
  1. signal ← TERM

    3signal="TERM"4case "$signal" in
    values this stepTERMsignal
  2. case "$signal" in

    3signal="TERM"4case "$signal" in5    INT) action="stop-from-keyboard" ;;
    values this stepTERMsignal
  3. action ← graceful-shutdown

    5INT) action="stop-from-keyboard" ;;6TERM) action="graceful-shutdown" ;;7HUP) action="reload-config" ;;
    values this stepgraceful-shutdownaction
  4. echo "$signal:$action"

    8esac9echo "$signal:$action"
    outputTERM:graceful-shutdown
    values this stepTERMsignalgraceful-shutdownaction
  1. signal ← INT

    3signal="INT"4case "$signal" in
    values this stepINTsignal
  2. case "$signal" in

    3signal="INT"4case "$signal" in5    INT) action="stop-from-keyboard" ;;
    values this stepINTsignal
  3. action ← stop-from-keyboard

    4case "$signal" in5    INT) action="stop-from-keyboard" ;;6    TERM) action="graceful-shutdown" ;;
    values this stepstop-from-keyboardaction
  4. echo "$signal:$action"

    8esac9echo "$signal:$action"
    outputINT:stop-from-keyboard
    values this stepINTsignalstop-from-keyboardaction
  1. signal ← HUP

    3signal="HUP"4case "$signal" in
    values this stepHUPsignal
  2. case "$signal" in

    3signal="HUP"4case "$signal" in5    INT) action="stop-from-keyboard" ;;
    values this stepHUPsignal
  3. action ← reload-config

    6    TERM) action="graceful-shutdown" ;;7    HUP) action="reload-config" ;;8esac
    values this stepreload-configaction
  4. echo "$signal:$action"

    8esac9echo "$signal:$action"
    outputHUP:reload-config
    values this stepHUPsignalreload-configaction
signal A signal is a small named notification sent to a process.
case route `case` makes signal-to-action decisions easy to scan.
modeled action This example prints the planned action instead of sending real signals.