shell交互脚本,告别case与select菜单的实现

目前大多数的一键脚本都是通过case或者是select语句对脚本中相关的功能进行列出,根据用户的输入在调用具体的方法体执行。但是往往面临一个问题就是当脚本的功能多起来或者是逻辑复杂后,脚本中关于交互的代码会变得不易维护和拓展。
而且渐渐的我们会发现为了制作一键脚本,但是codeing的时间都花在了脚本交互上,时间久了容易产生错觉shell的研发就是在写交互。auxt-shell在开始研发时也面临着这样一个问题,而且我们发现linux上大多数的大多数操作都已经有相关的脚本了,auxt-shell上在编写一遍属于重复轮子。因此更多的我们是把当前shell研发处在的问题点抽象出来,并给出对应的解决方案形成shell研发的基础支撑。

本次讲解的是不通过case和select语句实现shell的菜单交互,并且可以不侵入用户的业务脚本,脚本功能扩展时可以很平滑的实现菜单扩展。

1、功能实现展示:

2、通过auxt-shell项目实现脚本交互的代码

#!/bin/bash
########################公共文件引入######################
source ../base/auxt-base.sh
########################菜单列表配置区###################
###注意:功能名称与方法名称必须在数组中下标一一对应
dockerMenu=("Docker安装" "Docker仓库配置" "Docker卸载")
dockerFunction=(docker-install docker-hubset docker-uninstall)
###################脚本功能执行入口###############
###文件基本简介
echo && echo -e "${Info}Docker维护工具"
#菜单实现
auxtMenu "${dockerMenu[*]}"
#功能执行
${dockerFunction[$?]}

从上面的代码可以看出实现一个功能菜单只需要最简单的只需要5行代码即可。而当脚本的功能进行扩充的时,我们也只需要调整菜单列表配置区的数组内容即可。其他不需要进行任何修改。并且auxt-shell项目的菜单功能还实现了开发者项目信息声明和脚本退出功能支持。

3、auxt-shell项目菜单公共方法实现核心代码展示

##版权声明
echo && echo -e "auxt-shell自动化运维管理脚本 ${Green_font_prefix}[${sh_version}]${Font_color_suffix}-- XyzBeta | https://github.com/xyzbeta/auxt-shell --"

##菜单实现
function auxtMenu(){
#传参接收区,注意数组变量赋值给其它变量需要使用括号。
local menuArry=($1)
until [[ "0" == ${num} ]]
do
        echo
        local i=0
        while [ $i -lt ${#menuArry[@]} ]
        do
                echo -e "\t${Green_font_prefix}$((i+1)).${Font_color_suffix}${menuArry[i]}"
                let i++
        done
        echo -e "\t${Green_font_prefix}0.${Font_color_suffix}退出"
        echo && read -p "请输入数字[0-${#menuArry[@]}]:" num && echo
        if [[ "0" == ${num} ]]; then
                echo -e "${Info}执行退出命令." && echo
                exit 0;
        elif [[ "1" -le ${num} && ${num} -le ${#menuArry[@]} ]]; then
                return $((num-1))
                break
        else
                echo -e "${Tip}参数输入错误."
        fi
done
}

auxt-shell项目的菜单公共方法核心实现思路为,调用菜单方法传入一个菜单列表数组,方法根据数组的内容循环输出,并根据用户的选择返回数组下标到业务脚本,业务脚本根据下标定位数组二中的方法进行执行即可。

4、本文章只是auxt-shell项目中公共核心文件的菜单方法说明,了解和使用更多关于auxt-shell项目,你可以访问https://www.xyzbeta.com/81

本文系作者 @ 原创发布在 维简网。未经许可,禁止转载。

喜欢()
评论 (0)

请登录以参与评论。

现在登录…
热门搜索
5 文章
0 评论
1 喜欢
Top