如何制作一个Linux命令行的交互式菜单?
老胡的办法:
使用Linux的时候经常会编写脚本,有时候这些脚本需要和使用者产生一些交互,要由使用者进行选择或者输入一些内容。这个时候交互式菜单就比较有用了。关于交互式菜单老胡倒是有几个实现的思路:
一、最简单的实现最简单的做法就是先打印一行信息,提示用户输入yes/no,然后使用read从终端读取用户的输入并放到变量中:
#!/bin/bashecho -n "经理老胡是不是最帅的 (y/n)? "read answer这样的做法好处是比较简单,随手一写就OK了。坏处就是对用户的输入并没有作出限制,用户随便输入什么都可以赋值给变量answer,脚本读取到之后还需要进一步处理。
二、使用case分支判断在前面的基础上,加上case分支判断来处理输入项,使之能够与我们期望的输入一致,以便于准确做出选择:
可能有的朋友看见这个case的模式比较陌生,其实这里的模式和cut命令使用的模式是类似的,[Yy]*代表匹配一个大写或者小写的字母Y开头的任意长度字符串,[Nn]*就是字母N开头的任意长度字符串。这里的目的是保留了一定的容错性,又考虑了y和n的语义上的代表性。如果只需要匹配单个的y或者n,就把后面的*去掉就可以了。
三、使用select命令相比之下,case更适合做流程控制,拿来做用户交互有点生硬。select比case更加适合用作用户交互选择菜单:
select会使用输入的数字作为索引,在列表中去匹配对应的字符串,然后赋值给参数变量。case语句根据参数变量的值去选择对应的动作。select结构本身就是一个死循环,所以要在适当的分支中有跳出循环的break语句。
四、“可视化”的whiptail最后要介绍的就是bash终端的“可视化”交互工具whiptail:
效果:
参数很简单,--yesno意为带有yes和no两个按钮的对话框,20 60是高和宽,单位为字符。whiptail是一个很实用的交互式工具,可以使你的脚本操作更加人性化。老胡这里就不过多介绍了,感兴趣的朋友可以关注我私信了解。
总结一下,基于Linux命令行的交互式菜单核心思想还是要限制好用户的输入行为,毕竟判断用户的输入yes或者no还是很简单的,关键还是怎样检测y/n之外的输入值。使用case语句最简单,select更加高级一点,最方便成熟的还是用whiptail了,界面也比较友好。
如果我的回答对你有点价值,请莫忘点赞加关注,谢谢!欢迎在评论区发表各种意见。
本文为作者原创,严禁转载,违者必究。Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有