This shows you the differences between two versions of the page.
| — |
bash:case [2024/02/16 00:48] (current) |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ===== case ===== | ||
| + | <code bash>The case and select constructs are technically not loops, | ||
| + | since they do not iterate the execution of a code block. Like loops, | ||
| + | however, they direct program flow according to conditions at the top or bottom of the block. | ||
| + | Controlling program flow in a code block | ||
| + | |||
| + | case (in) / esac | ||
| + | |||
| + | The case construct is the shell scripting analog to switch in C/C++. | ||
| + | It permits branching to one of a number of code blocks, depending on condition tests. | ||
| + | It serves as a kind of shorthand for multiple if/then/else statements and is an appropriate tool for creating menus. | ||
| + | </code> | ||
| + | |||
| + | |||
| + | === bash case syntax === | ||
| + | <code bash> | ||
| + | case "$variable" in | ||
| + | |||
| + | "$condition1" ) | ||
| + | command... | ||
| + | ;; | ||
| + | |||
| + | "$condition2" ) | ||
| + | command... | ||
| + | ;; | ||
| + | |||
| + | esac | ||
| + | </code> | ||
| + | |||
| + | |||
| + | === bash case example === | ||
| + | <code bash> | ||
| + | #! /bin/bash | ||
| + | |||
| + | |||
| + | while [ $# -gt 0 ]; do # Until you run out of parameters . . . | ||
| + | case "$1" in | ||
| + | -d|--debug) | ||
| + | # "-d" or "--debug" parameter? | ||
| + | DEBUG=1 | ||
| + | ;; | ||
| + | -c|--conf) | ||
| + | CONFFILE="$2" | ||
| + | shift | ||
| + | if [ ! -f $CONFFILE ]; then | ||
| + | echo "Error: Supplied file doesn't exist!" | ||
| + | exit $E_CONFFILE # File not found error. | ||
| + | fi | ||
| + | ;; | ||
| + | esac | ||
| + | shift # Check next set of parameters. | ||
| + | done | ||
| + | |||
| + | # From Stefano Falsetto's "Log2Rot" script, | ||
| + | #+ part of his "rottlog" package. | ||
| + | # Used with permission | ||
| + | </code> | ||
| + | |||
| + | === output of case === | ||
| + | <code bash> | ||
| + | no output atm</code> | ||