Which keyword closes a `case` construct in a bash script?

LPIC-1 Exam 102-500, objective 105. Shells and shell scripting easy

Machine-checked — no person has signed for it. This question was read against the source cited below by an automated pass, which found no contradiction. That is a weaker claim than it sounds: the same kind of process wrote the question, so it can confirm its own mistake.

Treat it as a good draft rather than as settled fact, and read the source below before you rely on it. It is not used in mock exams here — only questions a person has signed for are.

How these questions are written — where each question comes from, what the verification ledger records, and what happens when one is found wrong.

The options

Not correct done

Wrong. `done` closes a loop body opened by `do`, that is for, while and until.

Correct esac

Correct. `case WORD in ... esac`, with the opening keyword spelled backwards, the same joke as if/fi.

Not correct fi

Wrong. `fi` closes an `if` construct, after any elif and else branches.

Not correct ;;

Wrong as the closer of the whole construct, though it is real syntax: `;;` ends one individual pattern branch inside case, before the next pattern begins.

Why

A case block looks like: `case "$1" in start) do_start ;; stop) do_stop ;; *) echo usage ;; esac`. Patterns are glob patterns, not regular expressions, so `*` is the catch-all and `start|restart)` matches either word. Each branch ends with `;;` and the whole construct ends with `esac`.

Where this comes from

Cited
LPI exam objective 105.2
What it says
Use standard shell syntax such as loops and conditional branches in scripts.

Practise this

Reading one question is not practice. The trainer will draw a short set from objective 105 and space the ones you get wrong.

Practise LPIC-1 Exam 102-500

More questions on this objective

All questions on Shells and shell scripting

Practise LPIC-1 Exam 102-500