Chinaunix首页 | 论坛 | 博客
  • 博客访问: 250618
  • 博文数量: 93
  • 博客积分: 3001
  • 博客等级: 中校
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-11 13:20
文章分类

全部博文(93)

文章存档

2011年(1)

2009年(92)

我的朋友

分类: LINUX

2009-07-11 17:48:22

here文档是生成菜单的简便方法,而bash提供了另一种循环机制,称为select循环,它主要用于创建菜单。 按数字顺序排列的菜单项将列表显示在标准错误输出上,并显示PS3提示符请求用户输入(默认时,PS3值为“#?”)。显示PS3提示符后,shell等待用户输入,输入的应当是菜单列表中的一个数字。输入值保存在一个shell的特殊变量REPLY中,它与选项列表中相应行的括号右面的字符串相关联。

case命令和select命令联合使用时,用户可以从菜单中进行选择,并基于选项执行相应的命令。LINESCOLUMNS变量,用来确定菜单在终端上的布局(这两个变量是2.xbash的内置变量,但在此之前的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 –Fpwddate)组成。这里列表中的词都是UNIX/Linux命令,当然它们也可以是任何其他的词语,如redgreenyellow,或是cheesebreadmilkcrackers等。如果词语中有空格,就要用引号把词括起来,如 ’ls –F’

3. do 关键字表示select循环开始。

4. 用户在在菜单中选择数字后,相当于选择了括号右边的词语的值,例如,如果选择了数字22与词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. 如果选择了guydan,则执行后面的echo命令,echo命令后是break命令,把控制跳转到第9行。

7. 内置的REPLY变量中保存当前列表中选项的序号,如123

8. esac标志着case命令的结束。

9. done标志着select循环的结束。

 

阅读(642) | 评论(0) | 转发(0) |
0

上一篇:until语句

下一篇:read语句

给主人留下些什么吧!~~