我正在创建一个简单的 bash 脚本,我想在其中创建一个选择菜单,如下所示:
$./script
echo "Choose your option:"
1) Option 1
2) Option 2
3) Option 3
4) Quit
并且根据用户的选择,我希望执行不同的操作。我是一个 bash shell 脚本新手,我在网上搜索了一些答案,但没有得到任何具体的答案。
我正在创建一个简单的 bash 脚本,我想在其中创建一个选择菜单,如下所示:
$./script
echo "Choose your option:"
1) Option 1
2) Option 2
3) Option 3
4) Quit
并且根据用户的选择,我希望执行不同的操作。我是一个 bash shell 脚本新手,我在网上搜索了一些答案,但没有得到任何具体的答案。
在需要退出循环的任何地方添加
break
语句。select
如果break
不执行 a,则select
语句循环并重新显示菜单。在第三个选项中,我包含了由
select
语句设置的变量,以证明您可以访问这些值。如果选择它,它将输出:您可以看到它
$REPLY
包含您在提示符处输入的字符串。它用作数组的索引,${options[@]}
就好像数组是基于 1 的一样。该变量$opt
包含数组中该索引的字符串。请注意,选择可以是直接在
select
语句中的简单列表,如下所示:但是您不能将这样的列表放入标量变量中,因为其中一个选项中有空格。
如果您在文件中进行选择,您还可以使用文件通配符:
使用
dialog
,命令将如下所示:将其放入脚本中:
本身并不是一个新的答案,但由于还没有公认的答案,这里有一些编码提示和技巧,适用于 select 和 zenity:
值得一提:
两者都会循环,直到用户明确选择退出(或取消 zenity)。这是交互式脚本菜单的好方法:选择一个选项并执行操作后,再次显示菜单以供另一个选择。如果选择是一次性的,那么就
break
在之后使用esac
(zenity 方法也可以进一步减少)两者
case
都是基于索引的,而不是基于价值的。我认为这更容易编码和维护数组也用于
zenity
方法。“退出”选项不在最初的原始选项中。它在需要时“添加”,因此您的阵列保持清洁。毕竟zenity不需要“退出”,用户只需点击“取消”(或关闭窗口)即可退出。请注意两者如何使用相同的、未触及的选项数组。
PS3
并且REPLY
vars不能重命名。select
被硬编码以使用这些。脚本中的所有其他变量(opt、options、prompt、title)可以有任何你想要的名字,只要你做了调整您可以使用这个简单的脚本来创建选项
我还有一个选项是这些答案的混合,但它的好处是你只需要按一个键,然后脚本就会继续,这要归功于
-n
read 选项。在此示例中,我们提示关闭、重新启动或简单地使用ANS
我们的变量退出脚本,用户只需按 E、R 或 S。我还将默认设置为退出,因此如果按 Enter,则脚本将退出。由于这是针对 Ubuntu,您应该使用配置为使用的任何后端 debconf。您可以通过以下方式找到 debconf 后端:
如果它说“对话框”,那么它可能使用
whiptail
ordialog
。在 Lucid 上是whiptail
.如果失败,请按照 Dennis Williamson 的说明使用 bash “select”。
Bash 精美菜单
先尝试一下,然后访问我的页面以获取详细说明...无需外部库或程序,例如 dialog 或 zenity ...
我使用过 Zenity,它在 Ubuntu 中似乎一直存在,运行良好并且有很多功能。这是一个可能的菜单的草图:
serverfault已经回答了同样的问题。那里的解决方案使用whiptail。