重击选择(制作菜单)

在本教程中,我们将介绍 select 在Bash中构建。

select 构造允许您生成菜单。

重击 select 构造#

select 构造从项目列表生成菜单。 它的语法与 for 循环:

select ITEM in [LIST]
do
  [COMMANDS]
done

[LIST] 可以是一系列由空格,数字范围,命令输出,数组等分隔的字符串。 自定义提示 select 可以使用 PS3 环境变量。

当。。。的时候 select 构造函数被调用后,列表中的每个项目都会显示在屏幕上(标准错误),并带有数字。

如果用户输入的数字对应于所显示项目之一的数字,则 [ITEM] 设置为该项目。 所选项目的值存储在变量中 REPLY。 否则,如果用户输入为空,则再次显示提示和菜单列表。

select 循环将继续运行并提示用户输入,直到 break 命令被执行。

展示如何 select 构造工作,让我们看下面的简单示例:

PS3="Enter a number: "

select character in Sheldon Leonard Penny Howard Raj
do
    echo "Selected character: $character"
    echo "Selected number: $REPLY"
done

该脚本将显示一个菜单,该菜单由带有附加编号的列表项和 PS3 提示。 当用户输入数字时,脚本将打印选定的字符和数字:

1) Sheldon
2) Leonard
3) Penny
4) Howard
5) Raj
Enter a number: 3
Selected character: Penny
Selected number: 3
Enter a number:

重击 select 例子#

通常, select 与结合使用 caseif 陈述。

让我们看一个更实际的例子。 它是一个简单的计算器,可以提示用户输入并执行基本的算术运算,例如加法,减法,乘法和除法。

PS3="Select the operation: "

select opt in add subtract multiply divide quit; do

  case $opt in
    add)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 + $n2 = $(($n1+$n2))"
      ;;
    subtract)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 - $n2 = $(($n1-$n2))"
      ;;
    multiply)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 * $n2 = $(($n1*$n2))"
      ;;
    divide)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 / $n2 = $(($n1/$n2))"
      ;;
    quit)
      break
      ;;
    *) 
      echo "Invalid option $REPLY"
      ;;
  esac
done

执行脚本后,它将显示菜单和 PS3 提示。 提示用户选择操作,然后输入两个数字。 根据用户的输入,脚本将打印结果。 在每次选择之后,将要求用户执行新操作,直到 break 命令被执行。

1) add
2) subtract
3) multiply
4) divide
5) quit
Select the operation: 1
Enter the first number: 4
Enter the second number: 5
4 + 5 = 9
Select the operation: 2
Enter the first number: 4
Enter the second number: 5
4 - 5 = -1
Select the operation: 9
Invalid option 9
Select the operation: 5

该脚本的一个缺点是它只能与整数一起使用。

这是更高级的版本。 我们正在使用 bc 支持浮点数以执行数学计算的工具。 同样,重复代码被分组在一个function中。

calculate () {
  read -p "Enter the first number: " n1
  read -p "Enter the second number: " n2
  echo "$n1 $1 $n2 = " $(bc -l <<< "$n1$1$n2")
}

PS3="Select the operation: "

select opt in add subtract multiply divide quit; do

  case $opt in
    add)
      calculate "+";;
    subtract)
      calculate "-";;
    multiply)
      calculate "*";;
    divide)
      calculate "https://linuxize.com/";;
    quit)
      break;;
    *) 
      echo "Invalid option $REPLY";;
  esac
done
1) add
2) subtract
3) multiply
4) divide
5) quit
Select the operation: 4
Enter the first number: 8
Enter the second number: 9
8 / 9 =  .88888888888888888888
Select the operation: 5   

结论#

select 构造使您可以轻松生成菜单。 在编写需要用户输入的shell脚本时,它特别有用。

如果您有任何疑问或反馈,请随时发表评论。

bash终端

Sidebar