I'd separate identifying the condition that is true given the possible values of the action variable from the functionality to be executed when that condition is true and do the former in awk and the latter in shell, e.g.
actionType=$condition=$(
action="$action" awk '
BEGIN {
lc = tolower(ENVIRON["action"])
if ( lc == "" ) { print "absent" }
else if ( lc ~ /^-{0,2}h(elp)?$/ ) { print "help" }
else if ( lc ~ /^(decode|redact|service)$/ ) { print "valid" }
else { print "invalid" }
}
'
)
case $actionType$condition in
absent ) echo '... must be specified ...'; exit 1 ;;
help ) echo '... the help message ...' ;;
invalid ) echo '... must be decode ...'; exit 3 ;;
esac
Obviously in this case you could print those messages from inside the awk script but you still need to handle the differing exit statuses and this shows how to handle the general case where there could be other commands to be called based on whatever is being validated by the awk script.