当前位置:首页 > 随笔 > 正文内容

推荐一组shell脚本菜单的嵌套模版

访客 随笔 2026年7月11日 6

34f8995bce0a794b0f6f59c85ece73a6.png

大家好,波哥又来给大家推荐好东西啦!

如果大家有需要帮忙推荐的工具、框架、应用、脚本可以在文章下方留言,留言中被点赞、推荐回复较多的,波哥就会帮各位提前安排哦!

介绍

波哥为大家总结了四种常见的 shell 脚本菜单选择编码模式,每种模式都有其独特的优点和适用场景,是提升脚本交互性和用户体验的有效工具。首先,select 命令是创建简单循环菜单的一种极为便捷的方法。它能够自动生成一个带编号的选择列表,并提示用户进行输入,适合于需要实现基本菜单功能的场合。通过 select 命令,开发者能够迅速创建出直观且易于使用的选择界面,虽然其功能较为基础,但胜在简洁明了。

其次,结合 read 命令和 case 语句则提供了一种更为灵活的方案。这种方法允许对用户输入进行更复杂的处理和验证,适合于需要多种选择和复杂逻辑的情况。通过这种方式,开发者可以捕获用户的输入并根据输入执行不同的逻辑分支,从而实现更复杂的交互功能。

第三种方法是利用 dialog 工具创建图形化菜单。这种方式可以生成更具视觉吸引力的用户界面,使交互过程更加友好和直观。不过,这需要确保系统上已安装 dialog 工具。此外,图形化界面在某些环境下可能对用户更为友好,特别是在需要提升用户体验的应用中。

最后,PS3 提示符的使用可以在 select 命令中自定义选择提示。通过修改提示信息,开发者可以为用户提供更清晰的引导信息,这在选项较多或选项描述较长时尤为有用。了解和掌握这四种方法,可以帮助开发者根据具体的项目需求选择最合适的实现方式,进而编写出更加高效和用户友好的 shell 脚本。

1、msgbox

dialog --title text --msgbox "This is a test" 10 20

效果图

6e4e290659e27d193c0a0ce877d9837e.png

2、select
#!/usr/bin/env bash


# using select in the menu


function diskspace {
  clear
  df -k
}


function whoseon {
  clear
  who
}


function menusage {
  clear
  cat /proc/meminfo
}


PS3="Enter option:"
select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program"
do
case $option in
  "Exit program")
    break ;;
  "Display disk space")
    diskspace ;;
  "Display logged on users")
    whoseon ;;
  "Display memory usage")
    menusage ;;
  *)
    clear
    echo "Sorry, wrong selection" ;;
esac
done
clear

效果图

5461b827e50658cf35d8a1a4f75aa870.png

3、脚本菜单

#!/usr/bin/env bash


function menu {
  clear
  echo
  echo -e "\t\tSys Admin Menu\n"
  echo -e "\t1. Display disk space"
  echo -e "\t2. Display logged on users"
  echo -e "\t3. Display memory usage"
  echo -e "\t0. Exit program\n\n"
  echo -en "\t\tEnter option:"
  read -n 1 option
}


function diskspace {
  clear
  df -k
}


function whoseon {
  clear
  who
}


function menusage {
  clear
  cat /proc/meminfo
}


while [ 1 ]
do
  menu
  case $option in
    0)
      break ;;
    1)
      diskspace ;;
    2)
      whoseon ;;
    3)
      menusage ;;
    *)
      clear
      echo "Sorry, wrong selection" ;;
  esac
  echo -en "\n\n\t\tHit any key to continue"
  read -n 1 line
done
clear
效果图

4、dialog
#!/usr/bin/env bash


# using dialog to create a menu


temp=`mktemp -t test.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`


function diskspace {
  df -k > $temp
  dialog --textbox $temp 20 60
}


function whoseon {
  who > $temp
  dialog --textbox $temp 20 50
}


function menusage {
  cat /proc/meminfo > $temp
  dialog --textbox $temp 20 50
}


while [ 1 ]
do
  dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 0 "Exit" 2> $temp2
  if [ $? -eq 1 ]
  then
    break
  fi


  selection=`cat $temp2`


  case $selection in
    1)
      diskspace ;;
    2)
      whoseon ;;
    3)
      menusage ;;
    0)
      break ;;
    *)
      dialog --msgbox "Sorry,invalid selection" 10 30
  esac
done
rm -f $temp 2> /dev/null
rm -f $temp2 2> /dev/null
效果图

995e27f04a24844bb6540202f28692b7.png

‍‍‍‍觉得不错别忘了给波哥一键三连哦!

波哥

IT行业近二十年的IT老炮。常年潜伏于国企、各一二线大厂中。硬件集成入行,直至虚拟技术、容器化。岗位历经系统集成、DBA、全栈开发、sre、项目经理、产品经理、部门总监。

主要作品:
  • IT类资源汇聚门户:https://www.98dev.com
  • 各大短视频平台:98dev
  • 各大主要技术论坛博客:IT运维技术圈
  • 长视频教学作品:《波哥讲网络》《波哥讲git》《波哥讲gitlab》
  • 小程序:IT面试精选
  • 构建技术社区:+V itboge1521 入学习交流群

相关文章

可以按小时收费的VPS

很多 VPS 提供商都支持 按小时计费(hourly billing),想短期试用 / 临时搭建节点、测试网络、短期项目等场景非常合适。下面是当前最主流且靠谱的按小时 VPS 选项,分别按不同需求场景整理: 1. Vultr(全球节点,包括日本) 按小时计费 可选机房:东京 / 大阪 / 洛杉矶 / 法兰克福 / 伦敦 … 支持 PayPal(部分情况),但更常用信用卡/PayPal+卡价格参考$...

在 iPhone 上下载国外App

地区/国家限制App Store 会根据 Apple ID 的国家或地区限制应用下载。如果你的 Apple ID 绑定的是中国大陆,就可能无法下载 OpenAI 官方的 ChatGPT 应用,因为它在大陆 App Store 不上架。解决办法:换成美国、加拿大、香港等地区的 Apple ID。或者在现有 Apple ID 上更改地区。注册一个国外 Apple ID(推荐)比如注册 美国区 Appl...

Node.js 中的异步编程:回调与 Promise

Node.js 是一个基于 JavaScript 构建的单线程、非阻塞运行环境,它通过异步编程机制来高效处理多个操作。在执行如文件读取、API 请求或数据库查询等任务时,Node.js 不会等待这些操作完成,而是使用回调函数和 Promise 来避免阻塞主线程。 回调方式实现异步 那么当异步操作完成后,Node.js 如何知道接下来要做什么呢?这就要用到 回调函数(callback)。 回调本质上...

Selenium自动化测试入门指南

Selenium自动化测试入门指南

什么是自动化测试? 自动化测试是指利用软件工具自动执行测试用例,模拟用户操作,如打开网页、点击链接、输入文本等,并验证结果是否符合预期。 其主要优点包括: 大幅减少人工成本 测试速度快 可以在非工作时间运行 支持持续集成和交付 然而,它也存在一些局限性,例如开发成本较高、不适合快速变化的项目、依赖稳定的UI界面等。 自动化测试的应用条件 适合引入自动化测试的情况包括: 手动测试耗时且需要大量...

MariaDB Galera集群故障快速恢复指南

OpenStack控制节点采用三节点MariaDB Galera集群架构。当数据库集群因故障重启时,有时会出现Galera集群无法正常启动的问题。虽然有多种方法可以恢复数据库服务,但如何实现快速启动同时确保数据完整性呢? 通过分析日志发现,MariaDB Galera集群节点宕机时会在日志中输出以下信息: [Note] WSREP: 新集群视图:全局状态: 874d8e7e-5980-11e8-8...

Android 中 EventBus 的通信机制与实现原理深度解析

EventBus 核心设计思想 EventBus 是一个基于观察者模式的事件总线框架,广泛应用于 Android 平台以实现组件解耦。它通过中心化的消息分发机制,使不同层级、不同线程的对象能够以"发布-订阅"方式通信,避免了传统接口回调或广播带来的强依赖问题。 核心角色说明 事件(Event):任意 Java 对象,作为数据载体,如网络状态变更通知、用户登录信息等。 发布者(Publi...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。