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。如果直接键入[回车],则再 次显示菜单。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注