May 2007
Beginner
628 pages
15h 46m
English
You need to provide the user with a list of options to choose from and you don’t want to make them type any more than necessary.
Use bash’s built-in select construct to generate a menu, then have the user choose by typing
the number of the selection:
# cookbook filename: select_dir
directorylist="Finished $(for i in /*;do [ -d "$i" ] && echo $i; done)"
PS3='Directory to process? ' # Set a useful select prompt
until [ "$directory" == "Finished" ]; do
printf "%b" "\a\n\nSelect a directory to process:\n" >&2
select directory in $directorylist; do
# User types a number which is stored in $REPLY, but select
# returns the value of the entry
if [ "$directory" == "Finished" ]; then
echo "Finished processing directories."
break
elif [ -n "$directory" ]; then
echo "You chose number $REPLY, processing $directory..."
# Do something here
break
else
echo "Invalid selection!"
fi # end of handle user's selection
done # end of select a directory
done # end of until dir == finishedThe select function makes it
trivial to present a numbered list to the user on STDERR, from which
they may make a choice. Don’t forget to provide an “exit” or “finished”
choice.
The number the user typed is returned in $REPLY, and the
value of that entry is returned in the variable you specified in the
select construct.
help select
help read
Read now
Unlock full access