.TH menu "" "" "/rdb Command" .PC "Root menu with some COHERENT commands" .B menu .PP .II "command^menu" The command .B menu displays a table of commands that you can execute by simply typing a number or a name. Menus are useful for inexperienced users. Experienced users can set up a menu very easily. .PP .B menu is a shell script that simply echos the .B menu table of choices, then waits for the user to type a number or name. Then .B menu uses a shell \fBcase\fR statement to execute a command or series of commands for each choice. To set up your own menus, simply copy the .B menu shell command from the .B $RDB/bin into your directory, then edit it. You should change its name to .B Menu or .BR Menu.something , to keep from confusing .BR /rdb . .PP There is a sample local .B menu, named .B Menu in directory .BR $RDB/demo . .SH Example The following gives an example menu: .B1 COHERENT MENU Number Name For ------- ------- ---------------------------------------------------- 0 exit leave menu or return to higher menu 1 Menu goto another local menu (if any) 2 sh get COHERENT shell 3 vi edit a file 4 mail read mail 5 send send mail to someone 6 cal see your calendar 7 who see who is on the system 8 ls list the files in this directory 9 cat display a file on the screen 10 rdb display rdb commands .sp \n(pDu Enter a number or name for the action you wish or DEL to exit: .B2 .PP .B menu waits for you to type your choice of number or name. Numbers are quicker to type, but names are more easily remembered, and help you learn how to do things at the shell level. .SH "Setting Up Your Own Menus" You can automate your operations with menus. If you have naive users who might have trouble learning or remembering the COHERENT or .B /rdb commands, you can set up menus for them. Also, when you have an operation in which a few commands are repeatedly executed, you can put them into a menu for simple choice. .PP You can put your menus in the directories in which they will be used or in your .B $HOME/bin or other .B bin directory. .PP To start, go to the directory of your choice and copy the .B $RDB .B menu to your directory: .DM cp $RDB/bin/menu Menu .DE .PP or .DM cp $RDB/demo/Menu . .DE .PP We suggest the convention of using the name .B Menu with the capital `M' so it appears at the top of your list of files when you do an .B lc command. .PP You can then name submenus; for example, \fBMenu.\fIother\fR where .I other is something that suggests the kinds of commands the menu displays. .PP Now edit the .B Menu file. As you study the code, you will find that it is very easy to create your own directory. .PP Menu is in two parts. The first part is the menu table: .DM cat << SCREEN $CLEAR COHERENT MENU Number Name For ------- ------- ------------------------- 0 exit leave menu or return to higher menu 1 Menu goto another local menu (if any) 2 sh get unix shell 3 vi edit a file 4 mail read mail 5 send send mail to someone 6 cal see your calendar 7 who see who is on the system 8 ls list the files in this directory 9 cat display a file on the screen 10 rdb display rdb commands .sp \n(pDu Please enter a number or name for the action you wish or DEL to exit: .sp \n(pDu SCREEN .DE .PP The command .B cat simply sends to the screen everything after the command and before the line that begins with .BR SCREEN , including the line that begins .BR "Please enter a number" . .PP The shell replaces .B $CLEAR on the first line with a sequence of characters that clears the terminal. .B $CLEAR must have been set by the following command in the .B menu or in the .B .profile file of the user: .DM .II clear CLEAR=`clear` .DE .PP The second part of .B Menu is a large .B case statement that you can edit to do what you want. Here is a sample: .DM .II read read ANSWER COMMENT .DE .DM .II case case $ANSWER in .DE .DM 0|exit) exit 0 ;; 1|Menu) Menu ;; 2|sh) sh ;; 3|vi) echo 'Which file or files do you wish to edit' read ANSWER COMMENT vi $ANSWER $COMMENT ;; .DE .DM 4|mail) mail ;; 5|send) echo 'Please enter login name of person to send mail to' read ANSWER COMMENT echo 'Type you letter, and end by typing Ctrl-d' mail $ANSWER ;; .DE .DM 6|cal) (cd ; calendar) ;; 7|who) who ;; 8|ls) ls ;; 9|cat) echo 'Please enter the name of the file you wish to see' read ANSWER COMMENT cat $ANSWER ;; .DE .DM 10|rdb) menu.rdb ;; *) echo 'Sorry, but that number or name is not recognized.' ;; esac .DE .PP The command .B read waits for the user to enter his choice. The first word typed is assigned to the shell variable .BR ANSWER . If the user types any more words, they are assigned to variable .BR COMMENT , which might be used in your commands. .PP Next is the .B case statement that examines .B $ANSWER to decide which command to execute. Note that the number and name are separated by a vertical-bar character `|' to mean .BR or : .DM 0|exit) exit 0 ;; .DE .PP This line is selected if type either 0 or .BR exit . The command .B exit is then executed. The double semicolons ``;;'' are required to show the end of the commands for this .B case statement. .PP Each .B case statement can hold any command or series of commands that you could type at your terminal. .B esac at the bottom is .B case spelled backwards; it marks the end of the whole .B case statement. .PP The expression .B *) catches any pattern that does not match earlier patterns. In this case, a message is displayed. The pound sign `#' marks the beginning of a comment. .PP You have great power to do things as a result of the user selecting a choice. Of course, you need to match the name and number in your menu table with the patterns in the .B case statement; it is easy to edit the first part and forget to edit the second. .SH "See Also" COHERENT Lexicon: .B case, cat, clear, echo, esac, ksh, read, sh .R