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 "\033[40;32m"
        ;;
    black_yellow) #黑底黄字
        echo -e "\033[40;33m"
        ;;
    black_white) #黑底白字
        echo -e "\033[40;37m"
        ;;
    black_blue) #黑底蓝字
        echo -e "\033[40;34m"
        ;;
    *) #默认为黑底白字
        echo -e "\033[30;37m"
        ;;
    esac
}

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

#清屏
echo -e "\033[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 "\t请输入您的选择【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 "\t请输入选择的颜色【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 "\033[2J"
                echo -e "\tInput 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 "\033[2J"
        echo -e "\tInput error! Please input again!"
        continue
        ;;
    #case语句结束
    esac
    #执行完命令后的提示
    echo -e -n "\t按任意键继续..."
    read anykey
    clear
#while循环结束
done

 

 

[root@250-shiyan prog]# cat menu

#!/bin/bash



####

color()

{

 case $1 in

  black_green)

   echo -e "\033[40;32m"

   ;;

  black_yellow)

   echo -e "\033[40;33m"

   ;;

  black_white)

   echo -e "\033[40;37m"

   ;;

  black_blue)

   echo -e "\033[40;34m"

   ;;

  *)

   echo -e "\033[30;37m"

   ;;

 esac

}

####



echo -e "\033[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 "\033[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 "\033[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 '\033[40;32m'

       ;;

    black_yellow)

       echo -e '\033[40;33m'

       ;;

    black_white)

       echo -e '\033[40;37m'

       ;;

    black_cyan)

       echo -e '\033[40;36m'

       ;;

    red_yellow)

       echo -e '\033[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 "\tYour Choice [1,2,3,4,H,Q] >"

    read CHOICE

    case $CHOICE in

        1) while1 ;;

        2) while2 ;;

        3) while3 ;;

        4)

    echo -e  "\e[31mTHIS is source\e[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 result\e[0m"

for1 ;;

        H|h)

    cat <<MAYDAY

this is the help screen,nothing here yet to help you !

MAYDAY

;;

        Q|q) exit 0

         ;;

        *) echo -e "\t\041Unknown user response"

         ;;

    esac

    echo -e -n "\tHit the any key to continue"

    get_char

done

 

你可能感兴趣的:(shell脚本)