Unix / Linux Shell - select 循环

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


语法

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

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

对于每个选择,将在循环中执行一组命令。 这个循环是在 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
$