Unix / Linux Shell - select 循环

select 循环提供了一种创建编号菜单的简便方法,用户可以从中选择选项。 当您需要要求用户从选项列表中选择一个或多个项目时,它很有用。


语法

select var in word1 word2 ... wordN
do
   Statement(s) to be executed for every word.
done

这里 var 是变量的名称,word1wordN 是由空格(单词)分隔的字符序列。每次执行 for 循环时,变量 var 的值都会设置为单词列表中的下一个单词,从 word1wordN

对于每个选择,将在循环中执行一组命令。 这个循环是在 ksh 中引入的,并且已经被改编成 bash。 它在 sh 中不可用。


示例

这是一个简单的例子,让用户选择一种饮料 −

#!/bin/ksh

select DRINK in tea cofee water juice appe all none
do
   case $DRINK in
      tea|cofee|water|all) 
         echo "Go to canteen"
         ;;
      juice|appe)
         echo "Available at home"
      ;;
      none) 
         break 
      ;;
      *) echo "ERROR: Invalid selection" 
      ;;
   esac
done

select 循环显示的菜单如下所示 −

$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
#? juice
Available at home
#? none
$

您可以通过更改变量 PS3 来更改选择循环显示的提示,如下所示 −

$PS3 = "Please make a selection => " ; export PS3
$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
Please make a selection => juice
Available at home
Please make a selection => none
$