cmds2;; . . . esac
Execute the first set of commands (cmds1) if value matches pattern1, execute the second set of commands (cmds2) if value matches pattern2, etc. The last command in each set ends with ;; and no further matches are attempted. If the set ends in ;& instead, execution continues with the commands for the next set of patterns; if it ends in ;;&, the next pattern in the list is tested. value is typically a positional parameter or other shell variable. cmds are typically Linux commands, shell programming commands, or variable assignments. Patterns can use file-generation metacharacters. Multiple patterns (separated by |) can be specified on the same line; in this case, the associated cmds are executed whenever value matches any of these patterns. See the Examples here and under eval.
A pattern may be preceded by an optional open parenthesis, as in (pattern, necessary for balancing parentheses inside a $( ) construct.
Check first command-line argument and take appropriate action:
case $1 in # Match the first arg no|yes) response=1;; -[tT]) table=TRUE;; *) echo "unknown option"; exit 1;; esac
Read user-supplied lines until user exits:
while : # Null command; always true do printf "Type . to finish ==> " read line case "$line" in .) echo "Message done" break ;; *) echo "$line" >> $message ;; esac done