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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# cookbook filename: select_dir directorylist="Finished $(ls /)" 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 while not finished |
The 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.