您的位置:首页 > 运维架构 > Shell

Linux Bash Shell学习(十二):流程控制——select

2009-12-29 21:57 716 查看
  本文也即《Learning the bash Shell》3rd Edition的第五章Flow Control之读书笔记之四,但我们将不限于此。flow control是任何编程语言中很常用的部分,也包括了case。在这里,我们将继续学习他们。

  select和其他流控制不一样,在C这类变成语言中没有类似的语句(C中的select用于socket,是完全不同的含义,不是流控制)。格式如下:

select
name
[in
list
]

do


statements that can use $name...

done

  和for的格式相似,有和for一样,可以删除in list,即使用缺省的in $@。通过select,我们很容易创建菜单:

  执行时的时候,会根据list给出菜单,用户选择之后执行statement,所选择的,放置在$name,执行完之后,再次给出菜单,等等用户执行,一直循环下去,用户如果向跳出循环,可以使用break,下面是一个基本例子:

# select Test Sample

# Test 1: Basic Usage Test

function test

{

echo 'select test 1'

mystack='a 123 red '

select entry in $mystack; do


#如果是有效的选择,则$entry中带有list中的值,如果是无效的选择,则为null,因此经常会根据此判断选择是否有效,例如用if [ $entry ]。


if [ $entry ]; then


echo "You select the choice '$entry'"

break

**注:由于select是个循环,通过break来跳出循环

else

echo "Invaild selection"

fi
done


}

test

执行结果

$./select-test

select test 1 **注:下面开始显示list中元素,并以菜单的方式出现*

1) a

2) 123

3) red

#?
h **注:出现提示符号#?,等待用户输入选择,如果直接回车,则再次显示菜单

Invaild selection

#?
3

You select the chioce 'red'

  在Linux Bash Shell学习(五):特殊文件、别名、选项和参数
中对于提示符,提到了PS1和PS2,在select中,给出的提示符,即上面例子中的#?就是PS3,我们可以在shell中对PS3进行重新定义。例如PS3=”Please select a choice : ”

执行完statement,将继续出现提示符,等待下次输入,如果需要从select的循环中退出来,使用break。如果直接键入[回车],则再次显示菜单。

  相关链接: 我的Linux操作相关文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: