Using 'select' for multiple choices in shell scripts
I found this neat construct in the gnu bash reference. Select is a great way to be able to present a list of options to a user in a shell script.
Take the example given in the reference:
select fname in *; do echo you picked $fname \($REPLY\) break; done
1) Applications 6) Library 11) User Guides And Information 16) bin 21) mach_kernel 26) tmp 2) Desktop DB 7) Network 12) Users 17) dev 22) mnt 27) upnp.log 3) Desktop DF \8) Parallels 13) VMware Images 18) etc 23) private 28) usr 4) Developer 9) Public 14) Volumes 19) mach 24) sbin 29) var 5) Fonts Folder 10) System 15) automount 20) mach.sym 25) sw #?
Now if you type the number of one of the options e.g. 10 you'll see the following:
you picked System (10)
As you can see in this example
fname is set to the item in the list selected. The special var
REPLY contains the number of the reply. Now to be able to use this in a script we would need to know when something other than one of the list items is selected. In this case the var
fname will be set to
null which can simply be tested with the -z switch in an if statement like so:
if [ -z $fname ]; then echo 'Your selection was invalid' fi
To learn more about shell-scripting in general then I would certainly recommend checking out Classic Shell Scripting.