在本教程中,我们将介绍Bash中select构造的基础,select构造允许您生成菜单。平台是:Linux操作系统。
Bash select构造 select构造从项目列表中生成菜单,它具有与for循环几乎相同的语法: select ITEM in [LIST] do [COMMANDS] done [LIST]可以是由空格、数字范围、命令输出、数组等分隔的一系列字符串,可以使用PS3环境变量设置select构造的自定义提示。 调用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:
Bash select示例 通常,将select与if语句结合使用。 让我们看一个更实际的例子,它是一个简单的计算器,可以提示用户输入并执行基本的算术运算,例如加法、减法、乘法和除法: 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工具来执行数学计算,同样,重复代码被分组在一个函数中: 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 "/";; quit) break;; *) echo "Invalid option $REPLY";; esac done 参考:echo命令_Linux echo命令使用详解:输出指定的字符串或者变量。 输出: 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脚本时,它特别有用。
相关主题 |