• shell脚本实例-菜单样例


    1.9.1 实例需求
            用户在进行Linux系统管理的过程中,经常需要用到查看进程的信息、用户的信息等常用的功能。本例针对这一需求,使用shell编程实现基本的系统管理 功能。通过本程序,可以按照要求实现查看进程信息、查看当前登录系统的用户信息等功能。程序主界面颜色可以更改,也可以显示帮助信息。
    1.9.2 系统设计
            根据需求,首先考虑到界面的美观性,将主界面设计为菜单形式。个系统管理功能作为其中的一个菜单项。当用户选择某项功能后,则执行相应的代码段完成功能并输出。输出结束后再返回主菜单,供用户继续选择。流程图如图1-1所示。

    1. shell编程 - Jim - Jim Liang
     图1-1 程序流程图


    1.9.3 程序代码
            按照上述设计思想,程序可以划分为几个模块:界面修改模块、主菜单模块、查看进程信息模块、查看用户信息模块和帮助模块。程序代码如下:

    #############################################################
    #界面修改模块:color函数

    #根据输入颜色信息修改界面颜色
    color()
    {
        case $1 in
        black_green) #黑底绿字
            echo -e "33[40;32m"
            ;;
        black_yellow) #黑底黄字
            echo -e "33[40;33m"
            ;;
        black_white) #黑底白字
            echo -e "33[40;37m"
            ;;
        black_blue) #黑底蓝字
            echo -e "33[40;34m"
            ;;
        *) #默认为黑底白字
            echo -e "33[30;37m"
            ;;
        esac
    }

    #############################################################
    #主菜单模块

    #清屏
    echo -e "33[2J"
    #设置信号处理
    trap "" 1 2 3
    #日期信息
    date=`date +%d/%m/%y`
    #机器名信息
    host=`hostname`
    #当前用户信息
    user=`whoami`

    #循环显示主菜单
    while :
    do
        #显示主菜单,menu作为cat命令的结束符
        cat <<menu
        ---------------------------------------------------
            $user    $host    $date
        ---------------------------------------------------
                1:改变字体颜色
                2:查看进程信息
                3:查看用户信息
                h:帮助
                q:退出
        ---------------------------------------------------
    menu
    #cat命令结束
       
        #提示用户输入选项
        echo -e -n " 请输入您的选择【1,2,3,h,q】:"
        #读取用户输入的选择项
        read choice
        #判断choice值
        case $choice in
        1) #用户输入1
            #while循环,接收用户输入的颜色选择
            while :
            do
        #显示颜色选择菜单
        cat <<menu_color
        ---------------------------------------------------
            $user    $host    $date
        ---------------------------------------------------
            1:黑绿    2:黑黄    3:黑白    4:黑蓝    0:返回
        ---------------------------------------------------
    menu_color
    #cat命令结束
                #提示用户输入颜色选项
                echo -e -n " 请输入选择的颜色【1,2,3,4,0】:"
                #读取用户的输入
                read choice_color
                #判断用户输入的颜色选项
                case $choice_color in
                1) #用户输入1
                    #调用color函数设置颜色
                    color black_green
                    ;;
                2) #用户输入2
                    #调用color函数设置颜色
                    color black_yellow
                    ;;
                3) #用户输入3
                    #调用color函数设置颜色
                    color black_white
                    ;;
                4) #用户输入4
                    #调用color函数设置颜色
                    color black_blue
                    ;;
                0) #用户输入0
                    #退出当前菜单
                    break
                    ;;
                *) #用户输入其它任意值
                    #输入错误,清屏继续等待输入
                    echo -e "33[2J"
                    echo -e " Input error! Please input again!"
                    continue
                    ;;
                #case结束
                esac
               
                clear
            #while结束
            done
            ;;
           
    #############################################################
    #查看进程信息模块

        2) #用户输入2
            #调用ps命令查看进程信息
            ps aux|sort -m|head -10
            ;;
           
    #############################################################
    #查看用户信息模块

        3) #用户输入3
            #调用who命令查看用户信息
            who
            ;;
           
    #############################################################
    #帮助模块
           
        H|h) #用户输入H或h
            #调用cat显示帮助信息
            cat <<menu_help
            选择“改变字体颜色“可以修改当前界面的字体颜色
            选择“查看进程信息“可以获取当前占用资源最高的前10个进程
            选择“查看用户信息“可以获取当前登录系统的用户信息
    menu_help
    #cat命令结束
            ;;
           
        Q|q) #用户输入Q或q
            #推出主程序
            exit 0
            ;;
        *) #用户输入其他值
            #输入错误,清屏继续等待输入
            echo -e "33[2J"
            echo -e " Input error! Please input again!"
            continue
            ;;
        #case语句结束
        esac
        #执行完命令后的提示
        echo -e -n " 按任意键继续..."
        read anykey
        clear
    #while循环结束
    done

    [root@250-shiyan prog]# cat menu
    #!/bin/bash
    
    ####
    color()
    {
     case $1 in
      black_green)
       echo -e "33[40;32m"
       ;;
      black_yellow)
       echo -e "33[40;33m"
       ;;
      black_white)
       echo -e "33[40;37m"
       ;;
      black_blue)
       echo -e "33[40;34m"
       ;;
      *)
       echo -e "33[30;37m"
       ;;
     esac
    }
    ####
    
    echo -e "33[2j"
    trap "" 1 2 3
    date=`date +%d/%m/%y`
    host=`hostname`
    user=`whoami`
    
    ####
    while :
     do
     cat <<menu
    -------------------------------------------------
     $user          $host           $date
    -------------------------------------------------
            1:change font color
            2:view process info
            3:view user info
            h:help
            q:quit
    -------------------------------------------------
    menu
     echo -en "please input choice [1,2,3,h,q]:"
     read choice
     case $choice in
      1)
    ####
       while :
        do
        cat <<menu_color
    *************************************************
     $user          $host           $date
    *************************************************
            1:black_green
            2:balck_yellow
            3:black_white
            4:black_blue
            0:back
    *************************************************
    menu_color
        echo -ne "please input color [1,2,3,4,0]:"
        read color
        case $color in
         1)
          color black_green;;
         2)
          color black_yellow;;
         3)
          color black_white;;
         4)
          color black_blue;;
         0)
          break;;
         *)
          echo -e "33[2j"
          echo -e "input error! please input again!"
          continue
          ;;
        esac
        clear
        done
       ;;
    ####
      2)
       ps aux|sort -m|head -10
       ;;
      3)
       who
       ;;
      H|h)
       cat <<menu_help
    select1 "change font color" can alert current UI's color
    select1 "view ps info" can view ps info
    select1 "view user info" can view user info
    menu_help
       ;;
      Q|q)
       exit 0
       ;;
      *)
       echo -e "33[2j"
       echo -e "input error! please input again!"
       continue
       ;;
     esac
     echo -ne "please press any key to continue"
     read anykey
     clear
    done
    [root@250-shiyan prog]#
    shell菜单样例
    
    #!/bin/sh
    #menu
    #set the date,user and hostname up
    MYDATE=`date +%d/%m/%Y`
    THIS_HOST=`hostname -s`
    USER=`whoami`
    PWD=`pwd`
    
    trap "" 2 3 15
    
    ####colour function
    colour ()
    {
      case $1 in
        black_green)
           echo -e '33[40;32m'
           ;;
        black_yellow)
           echo -e '33[40;33m'
           ;;
        black_white)
           echo -e '33[40;37m'
           ;;
        black_cyan)
           echo -e '33[40;36m'
           ;;
        red_yellow)
           echo -e '33[41;33m'
           ;;
       esac
    }
    #### single key function
    get_char()
    {
      #get_char
      #save current stty setting
      SAVEDSTTY=`stty -g`
      #如果你的机器上不认stty raw那么把函数中两处出现的raw换成cbreak
      stty cbreak
      dd if=/dev/tty bs=1 count=1 2>/dev/null
      stty -cbreak
      #restore stty
      stty $SAVEDSTTY
    }
    #### while1 function
    while1()
    {
    while [ 1 -gt 0 ]
    do
    sleep 3
    echo used
    echo "`free |awk '/Mem/{print $3}'`"
    done
    }
    #### for1 function
    for1(){
    for i in {1,2,3,4}
    do
    sleep 3
    echo used
    echo "0:`free |awk '/Mem/{print $3}'`:freeeeeeeee"
    done
    }
    #### while2 function
    while2 () {
    min=1
    max=100
    while [ $min -le $max ]
    do
     echo $min
     min=`expr $min + 1`
    done
    }
    #### while3 function
    while3 () {
    i=1
    while(($i<100))
    do
        if(($i%4==0))
        then
            echo $i
        fi
        i=$(($i+1))
    done
    }
    
    #loop forever !
    while :
    do
        # clear the screen
        tput clear
        colour black_green
        # here documents starts here
        cat <<MAYDAY
    ---------------------------------------------------------------------------
     User:$USER  Host:$THIS_HOST  Date:$MYDATE  Pwd:$PWD
    ---------------------------------------------------------------------------
      1 : while1                            2 : while2
      3 : while3                            4 : for1
      H : Help screen
      Q : Exit Menu
    ---------------------------------------------------------------------------
    MAYDAY
        # here document finished
        colour black_cyan
        echo -e -n "	Your Choice [1,2,3,4,H,Q] >"
        read CHOICE
        case $CHOICE in
            1) while1 ;;
            2) while2 ;;
            3) while3 ;;
            4)
        echo -e  "e[31mTHIS is sourcee[0m"
        cat <<MAYDAY
    for1(){
    for i in {1,2,3,4}
    do
    sleep 3
    echo used
    echo "0:`free |awk '/Mem/{print $3}'`:freeeeeeeee"
    done
    }
    MAYDAY
        echo -e "e[31mTHIS is resulte[0m"
    for1 ;;
            H|h)
        cat <<MAYDAY
    this is the help screen,nothing here yet to help you !
    MAYDAY
    ;;
            Q|q) exit 0
             ;;
            *) echo -e "	41Unknown user response"
             ;;
        esac
        echo -e -n "	Hit the any key to continue"
        get_char
    done
  • 相关阅读:
    参数方法HttpServletRequest之getParameter
    nullnull单例的实现方式之GCD方法
    阻带窗函数[数字信号处理]使用窗函数设计FIR滤波器
    nullnullhdu4450Draw Something
    第三方设置XML解析:第三方库GDataXMLNode的使用
    class左边nbu 2414 Please help the poor donkey!
    数据可视化可视化营养含量
    速度坐标hdu4445Crazy Tank
    singletonclassDesign Patterns: Singleton Basics 设计模式:单例基础
    控制台权限MMC不能打开文件 SQL Server Enterprise Manager.MSC 或权限不够 (解决方法 )
  • 原文地址:https://www.cnblogs.com/createyuan/p/4228841.html
Copyright © 2020-2023  润新知