【linux】Shell编程中的菜单建立方法的比较分析
时间:2010-10-25 来源:terasic
here文档的方法重要是使用here建立屏幕输出,然后手工建立备选条目的连接关系,而select命令则直接提供了目录显示以及条目连接的功能。
两者的使用对比:
A.使用HERE文档
here文档的使用方法:
A here document is a special-purpose code block. It uses a form of I/O redirection to feed a command list to an interactive program or a command, such as ftp, cat, or the ex text editor.
1 COMMAND <<InputComesFromHERE 2 ... 3 InputComesFromHERE |
A limit string delineates (frames) the command list. The special symbol << designates the limit string. This has the effect of redirecting the output of a file into the stdin of the program or command. It is similar to interactive-program < command-file, where command-file contains
1 command #1 2 command #2 3 ... |
The here document alternative looks like this:
1 #!/bin/bash 2 interactive-program <<LimitString 3 command #1 4 command #2 5 ... 6 LimitString |
Choose a limit string sufficiently unusual that it will not occur anywhere in the command list and confuse matters.
在使用here建立菜单中我们正是看中他可以接受多个参数的特点,与case语句一起使用。其中here用来建立在屏幕上显示的选项,case用来检验用户的选择并执行相应的命令。使用here的例程:
显示结果:
从本例可以看出,使用和here文档的方式建立目录,只是在显示上得到了实惠。下面使用select命令来实现目录的建立。
B.使用select命令
select命令的主要功能就是建立目录菜单。其基本原理是,将一个数字化的菜单显示在错误输出上,PS3用来提示用户输入。默认的PS3是#?。在PS3提示显示以后,shell就等待用户的输入。输入的是改菜单上的数字,若获得了输入,就自动保存在了变量REPLY中,则变量REPLY中的数字和括号右边的选项自动建立了连接关系。例子:
输出结果:
从结果中可以看到,select的使用具有以下的特点:
1.与使用here相比,select函数可以自动生成备选条目列表,省略了here的使用;select的使用同时可以自动生成列表和参数之间的对应关系,,在例2中可以直接使用$choice显示参数,若显示代号可以使用$REPLY.而例1中choice内部数值只是人工建立链接时的代号,$choice只能显示123等,
2.select是循环函数,若在do后想结束程序,需自己加入break,从例2可以看出有无break的区别。
3.select使用时常使用PS3作为自动输出,PS3显示在菜单的底部。
4.select命令建立菜单相比之下具有高的效率。