case statement saves going through a whole set of
if .. then .. else statements. Its syntax is really quite
#!/bin/sh echo "Please talk to me ..." while : do read INPUT_STRING case $INPUT_STRING in hello) echo "Hello yourself!" ;; bye) echo "See you again!" break ;; *) echo "Sorry, I don't understand" ;; esac done echo echo "That's all folks!"
Okay, so it's not the best conversationalist in the world; it's only an example!
Try running it and check how it works...
$ ./talk.sh Please talk to me ... hello Hello yourself! What do you think of politics? Sorry, I don't understand bye See you again! That's all folks! $
The syntax is quite simple:
case line itself is always of the same format, and it
means that we are testing the value of the variable
The options that we understand are then listed and followed by a right bracket,
This means that if
hello then that section
of code is executed, up to the double semicolon.
bye then the goodbye
message is printed and the loop exits. Note that if we wanted to exit
the script completely then we would use the command
break just breaks out of the
while loop and continues the next part of the script.
The third option here, the
*), is the default catch-all
condition; it is not required, but is often useful for debugging purposes
even if we think we know what values the test variable will have.
The whole case statement is ended with
esac (case backwards!)
then we end the while loop with a
That's about as complicated as
case conditions get, but they can be a
very useful and powerful tool. They are often used to parse the
parameters passed to a shell script, amongst other uses.