Creating Simple Menus
Problem
You have a simple SQL script that you would like to run against different databases to reset them for tests that you want to run. You could supply the name of the database on the command line, but you want something more interactive. How can you write a shell script to choose from a list of names?
Solution
Use the select statement to create simple character-based screen menus. Here’s a simple example:
#!/usr/bin/env bash
# cookbook filename: dbinit.1
#
DBLIST=$(sh ./listdb | tail -n +2)
select DB in $DBLIST
do
echo Initializing database: $DB
mysql -u user -p $DB <myinit.sql
doneIgnore for a moment how $DBLIST
gets its values; just know that it is a list of words (like the output
from ls would give). The select statement will display those words,
each preceded by a number, and the user will be prompted for input. The
user makes a choice by typing the number and the corresponding word is
assigned to the variable specified after the keyword select (in this case DB).
Here’s what the running of this script might look like:
$ ./dbinit 1) testDB 2) simpleInventory 3) masterInventory 4) otherDB #? 2 Initializing database: simpleInventory #? $
Discussion
When the user types “2” the variable DB is assigned the word
simpleInventory. If you really want
to get at the user’s literal choice, the variable $REPLY will hold it, in this case it would be
“2”.
The select statement is really a loop. When you have entered a choice it will execute the body of the loop (between the ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access