While with Case
A common use of the case statement that you saw in Chapter 5 is to place it within a while loop. The case statement is then a useful tool which decides what to do on each iteration around the loop. The loop itself is then usually exited with the break statement introduced previously. This can be useful when you want to keep reading through some input until you either find a certain condition on the current line or until you get to the end of the input. This recipe implements a very simplistic command parser, which takes four commands: echo, upper, lower, and quit. The first echoes the input exactly, the second converts to uppercase, and the third converts to lowercase. When the quit command is found, it uses break to get out of the loop.
$ cat while-case.sh #!/bin/bash quit=0 while read command data do case $command in echo) echo "Found an echo command: $data" ;; upper) echo -en "Found an upper command: " echo $data | tr '[:lower:]' '[:upper:]' ;; lower) echo -en "Found a lower command: " echo $data | tr '[:upper:]' '[:lower:]' ;; quit) echo "Quitting as requested." quit=1 break ;; *) echo "Read $command which is not valid input." echo "Valid commands are echo, upper, lower, or quit." ;; esac done if [ $quit -eq 1 ]; then echo "Broke out of the loop as directed." else echo "Got to the end of the input without being ...