前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >推荐一组shell脚本菜单的嵌套模版

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

作者头像
IT运维技术圈
发布2024-12-05 12:32:05
发布2024-12-05 12:32:05
810
举报
文章被收录于专栏:IT运维技术圈

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

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

介绍

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

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

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

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

1、msgbox

代码语言:javascript
复制
dialog --title text --msgbox "This is a test" 10 20

效果图

代码语言:javascript
复制
代码语言:javascript
复制
2、select
代码语言:javascript
复制
#!/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
代码语言:javascript
复制

效果图

3、脚本菜单

代码语言:javascript
复制
#!/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
代码语言:javascript
复制
效果图
代码语言:javascript
复制
代码语言:javascript
复制
4、dialog
代码语言:javascript
复制
#!/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
代码语言:javascript
复制
代码语言:javascript
复制
效果图

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT运维技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档