免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1083 | 回复: 0
打印 上一主题 下一主题

select语句和菜单 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-11 17:48 |只看该作者 |倒序浏览

here文档是生成菜单的简便方法,而bash提供了另一种循环机制,称为select循环,它主要用于创建菜单。 按数字顺序排列的菜单项将列表显示在标准错误输出上,并显示PS3提示符请求用户输入(默认时,PS3值为“#?”)。显示PS3提示符后,shell等待用户输入,输入的应当是菜单列表中的一个数字。输入值保存在一个shell的特殊变量REPLY中,它与选项列表中相应行的括号右面的字符串相关联。
case命令和select命令联合使用时,用户可以从菜单中进行选择,并基于选项执行相应的命令。LINES和COLUMNS变量,用来确定菜单在终端上的布局(这两个变量是2.x版bash的内置变量,但在此之前的bash版本中没有。如果您所使用的bash shell中它们还没有定义,可以在.bash_profile文件中定义并导出它们)。输出被显示在标准错误上,每一项的开头是一个数字和右括号,PS3提示符显示在菜单底部。因为select命令是一个循环命令,因此,一定要记住用break命令退出循环,或者用exit命令退出脚本程序。
格式
select var in wordlist
do
命令(或命令组)
done
范例14-42
(脚本)
    #!/bin/bash
    # Scriptname: runit
1   PS3="Select a program to execute: "
2   select program  in 'ls -F' pwd date
3   do
4        $program
5   done
(命令行)
Select a program to execute: 2
1) ls -F
2) pwd
3) date
/home/ellie
Select a program to execute: 1
1) ls -F
2) pwd
3) date
12abcrty abc12  doit* progs/  xyz
Select a program to execute: 3
1) ls -F
2) pwd
3) date
Sun Mar 12 13:28:25 PST 2004
说明
1. PS3变量被赋值为提示语句,出现在菜单选项的下面。而默认的PS3提示符为“$#”,并送到标准错误输出上,即屏幕上。
2. select循环由program变量和显示在菜单上的词列表(ls –F,pwd和date)组成。这里列表中的词都是UNIX/Linux命令,当然它们也可以是任何其他的词语,如red,green,yellow,或是cheese,bread,milk,crackers等。如果词语中有空格,就要用引号把词括起来,如 ’ls –F’。
3. do 关键字表示select循环开始。
4. 用户在在菜单中选择数字后,相当于选择了括号右边的词语的值,例如,如果选择了数字2,2与词pwd关联,那么pwd将被赋值给变量program。$program解释为命令pwd,并执行该命令。
5. done命令标志着select循环体中的语句结束,控制返回到循环顶部,循环将一直执行,直到用户按下Ctrl+C组合键。
范例14-43
(脚本)
    #!/bin/bash
    # Scriptname: goodboys
1   PS3="Please choose one of the three boys : "
2   select choice in tom dan guy
3   do
4       case "$choice" in
        tom)
            echo Tom is a cool dude!
5            break;;         # break out of the select loop
6       dan | guy )
            echo Dan and Guy are both wonderful.
            break;;
        *)
7           echo "$REPLY is not one of your choices" 1>&2
            echo "Try again."
            ;;
8       esac
9   done
(命令行)
$ goodboys
1) tom
2) dan
3) guy
Please choose one of the three boys : 2
Dan and Guy are both wonderful.
$ goodboys
1) tom
2) dan
3) guy
Please choose one of the three boys : 4
4 is not one of your choices
Try again.
Please choose one of the three boys : 1
Tom is a cool dude!
$
说明
1. PS3提示符将打印在菜单的下面。
2. 进入select循环,列表中的词显示为一个按数字排序的菜单。
3. 循环体开始。
4. 变量choice被赋值为列表中的第一个值,然后该值从列表中移出,下一项将为第一个值。
5. break语句把循环控制跳转到第9行。
6. 如果选择了guy或dan,则执行后面的echo命令,echo命令后是break命令,把控制跳转到第9行。
7. 内置的REPLY变量中保存当前列表中选项的序号,如1,2或3。
8. esac标志着case命令的结束。
9. done标志着select循环的结束。



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/100752/showart_1993296.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP