• 一个有用的循环程序


    #!/bin/sh

    ##################
    记录当前脚本位置
    Base_Dir=`pwd`
    ##################
    #初始化索引变量,允许大小写字母数字
    _Choss="[[:alnum:]]" #Supoort nunber/alphabet [0-9a-zA-Z]
    ##################
    #是否允许返回上一层,0允许,1不允许
    _Menu=0
    ##################
    #菜单配置文件
    CONFIG_FILE=XXXXXXXXXXXX/XXX

    cd $Base_Dir
    ##################
    #退出条件交给程序控制,这里不管了
    while : ;do

    #clear ##清屏并显示一堆横线
    echo "---------------------------------------------------------------------------------"
    ########################
    #显示一级菜单
    grep -w "^$_Choss " CONFIG_FILE 1>2 2>/dev/null
    if [ $? -eq 0 ];then
    grep "^$_Choss* " CONFIG_FILE | awk '{printf "%-10s%-20s ",$1,$2}' ######允许每个条目中有其他数据
    else
    echo "Nothing to do,Please Input q Go Back !"
    ############################
    #已经是最上层,不允许回退到上一层
    _Menu=1 #You Can go no Futher
    fi
    echo "---------------------------------------------------------------------------------"
    echo "Please Input Your choose: Exit:Q/q"
    read opt
    echo $opt | grep -i q 1>2 2>/dev/null
    if [ $? -eq 0 ];then
    ##################
    #不管输入大小写q,设置_opt为q
    #因此,正常的菜单项选择中不能有q
    _opt=q
    else
    ############################
    #判断输入是否合法,如果合法就设置_opt为1,非法设置为0
    echo $opt | grep "[^[:alnum:]]" 1>2 2>/dev/null && _opt=1 || _opt=0
    [ "$opt" = "" ] && _opt=1
    fi
    ##判断是否允许退回上一层
    [ $_Menu -eq 1 -a "$_opt" != "q" ] && echo "Input Error!" && continue #You May Go no where but Back
    case $_opt in
    ###返回上一层
    q) #Go Back
    if [ `echo $_Choss | awk -F"-" '{print NF}'` -eq 1 ];then
    #退无可退,脚本退出。
    ##程序唯一的出口
    #当然,你要 Ctrl+C 退出,我也不管。
    exit 0
    else
    #########
    #去掉通配符前面的那个字符,而非最后一个
    _Choss="$(echo $_Choss | sed s'/[[:alnum:]][[:alnum:]]*-[[:alnum:]]/[[:alnum:]]/')"
    _Menu=0 #You May Go Futher
    fi
    ;;
    0)#
    #################
    #如果对应条目对应位置<99吧>有脚本,就执行拼接后的脚本
    #否则,就在当前选择添加到索引值里,注意,非最后
    _sh=`grep -w "^$(echo $_Choss|sed 's/-[[:alnum:]]//')-$opt " CONFIG_FILE|awk '{print $99}'`
    if [ -f $Base_Dir/bin/$_sh ];then
    sh $Base_Dir/bin/$_sh
    continue
    else
    if [ `echo $_Choss | awk -F"-" '{print NF}'` -eq 1 ];then
    ##########
    #如果是一级菜单,就直接添加
    _Choss="$opt-[[:alnum:]]"
    else
    ##########
    #非一级菜单的处理
    _Choss="$(echo $_Choss|sed 's/-[[:alnum:]]//')-$opt-[[:alnum:]]"
    fi
    fi
    ;;
    1) #
    echo "Input Error!"
    ;;
    esac
    done

  • 相关阅读:
    个人作业-数组3
    Java编程思想
    19年春第三周学习
    个人作业-数组2
    自我介绍
    个人作业-数组
    19春第二周学习心得
    fiddler--华为手机下载安装fiddler证书
    RF接口测试----post请求
    RF接口测试----get请求
  • 原文地址:https://www.cnblogs.com/smallfishy/p/12917309.html
Copyright © 2020-2023  润新知