1.9.1 实例需求

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

 图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@-shiyan prog]# cat menu
#!/bin/bash ####
color()
{
case $ 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 ""
date=`date +%d/%m/%y`
host=`hostname`
user=`whoami` ####
while :
do
cat <<menu
-------------------------------------------------
$user $host $date
-------------------------------------------------
:change font color
:view process info
:view user info
h:help
q:quit
-------------------------------------------------
menu
echo -en "please input choice [1,2,3,h,q]:"
read choice
case $choice in
)
####
while :
do
cat <<menu_color
*************************************************
$user $host $date
*************************************************
:black_green
:balck_yellow
:black_white
:black_blue
:back
*************************************************
menu_color
echo -ne "please input color [1,2,3,4,0]:"
read color
case $color in
)
color black_green;;
)
color black_yellow;;
)
color black_white;;
)
color black_blue;;
)
break;;
*)
echo -e "\033[2j"
echo -e "input error! please input again!"
continue
;;
esac
clear
done
;;
####
)
ps aux|sort -m|head -
;;
)
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
;;
*)
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@-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 "" ####colour function
colour ()
{
case $ 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= count= >/dev/null
stty -cbreak
#restore stty
stty $SAVEDSTTY
}
#### while1 function
while1()
{
while [ -gt ]
do
sleep
echo used
echo "`free |awk '/Mem/{print $3}'`"
done
}
#### for1 function
for1(){
for i in {,,,}
do
sleep
echo used
echo "0:`free |awk '/Mem/{print $3}'`:freeeeeeeee"
done
}
#### while2 function
while2 () {
min=
max=
while [ $min -le $max ]
do
echo $min
min=`expr $min + `
done
}
#### while3 function
while3 () {
i=
while(($i<))
do
if(($i%==))
then
echo $i
fi
i=$(($i+))
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
---------------------------------------------------------------------------
: while1 : while2
: while3 : 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
) while1 ;;
) while2 ;;
) while3 ;;
)
echo -e "\e[31mTHIS is source\e[0m"
cat <<MAYDAY
for1(){
for i in {,,,}
do
sleep
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
;;
*) echo -e "\t\041Unknown user response"
;;
esac
echo -e -n "\tHit the any key to continue"
get_char
done

shell脚本实例-菜单样例的更多相关文章

  1. 分享7个shell脚本实例--shell脚本练习必备

    概述 看多shell脚本实例自然就会有shell脚本的编写思路了,所以我一般比较推荐看脚本实例来练习shell脚本.下面分享几个shell脚本实例. 1.监测Nginx访问日志502情况,并做相应动作 ...

  2. shell脚本实例-系统监控

    shell脚本监控网站并实现邮件.短信报警shell进程监控脚本(发送邮件报警)Shell脚本监控服务器在线状态和邮件报警的方法 http://www.jbxue.com/jb/shell/ 11. ...

  3. shell脚本实例,通向shell脚本大师的必经之路

    概述 读书百遍其义自见,shell脚本也是,只要例子看得多了,自然就知道怎么写了.这里主要整理了20几个例子,因为内容比较多,所以分了几次来做介绍了.下面的实例最好先自己思考怎么去实现,然后再看下实现 ...

  4. shell脚本实例

    备注:一些与传递给shell的参数相关的变量:$# 命令行参数的个数$? 调用命令的返回值$$ 当前进程的进程号$! 最后一个后台命令的进程号$0 命令行的第一个参数,也就是命令名$n 命令行的第n个 ...

  5. shell脚本实例一,移动文件夹中大于2000B的文件到另一个文件夹

    shell脚本能帮我们简化linux下的一些工作,现在有个需求,把TMPA文件夹下大于2000B的文件都移动到TMPB下 #! /bin/bash function movefiles() { ` d ...

  6. shell脚本实例一

    一. 什么是shell 脚本时一种解释性语言: shell脚本保存执行动作: 脚本判定命令的执行条件 脚本来实现动作的批量执行.二.如何创建 vim  test.sh     ##shell脚本一般都 ...

  7. 【学习】Linux Shell脚本实例之一

    1.程序流程控制实例 程序流程控制,实际上就是改变程序的执行顺序.程序在执行过程中若流程被改变,就可能导致输出不同,因此利用这一特性就能够实现程序执行结果的控制.程序流程控制可分为“选择”和“循环”这 ...

  8. shell脚本实例-mysql多机部署

    今天我给大家分享shell 安装mysql 多机部署的实例,本次实验是基于各个主机的公钥已经配置好了,如果还不会推送公钥的同学,可以看看我以前写的文章,那里面有写推公钥的实例,mysql 多机部署一般 ...

  9. 一些shell脚本实例

    在群里也混了不少时间了.总结一些实例 #统计QQ消息里面某个用户改名字的记录# awk -f# 聊改名字记录#特殊例子 例如#2013-11-28 9:23:56 北京-AA-Vip<12345 ...

随机推荐

  1. iOS GET、POST数据解析

    在实际开发中,JSON数据解析更简单易行,一般均使用json数据解析,因此,程序猿们请务必和后台搞好关系,让他给你json数据.    XML解析: ios SDK提供了NSXMLParser和lib ...

  2. Android Priority Job Queue (Job Manager)(一)

     Android Priority Job Queue (Job Manager)(一) 一.为什么要引入Android Priority Job Queue (Job Manager)?如今的A ...

  3. 《More Effective C++ 》笔记

    条款10 防止构造函数里的资源泄露 条款20 协助编译器实现返回值优化 条款22 考虑使用op=来取代单独的op运算符 条款26 限制类对象的个数 条款27 要求或禁止对象分配在堆上

  4. 机器学习技法-决策树和CART分类回归树构建算法

    课程地址:https://class.coursera.org/ntumltwo-002/lecture 重要!重要!重要~ 一.决策树(Decision Tree).口袋(Bagging),自适应增 ...

  5. PAT (Basic Level) Practise:1005. 继续(3n+1)猜想

    [题目链接] 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对n=3进 ...

  6. git不能提交jar的设置

      项目目录下 文件:.gitignore ,里面设置: *.class # Package Files # *.jar *.war *.ear 删除*.jar

  7. Matlab 2012a 下载和安装教程

    迅雷下载地址    http://bbs.pinggu.org/thread-1426998-1-1.html(下载速度比较快) 1 Setup.exe 2. 不使用 internet 安装 then ...

  8. poj 1190 生日蛋糕

    中文题 题目分析 搜索题,非常好的剪枝 由于深度一定(m),所以使用深度优先搜索,自上而下的设定蛋糕序号,最顶层的为第1层,……,最底层的蛋糕为第m层,很明显满足题目条件的前i层的(从顶层(也就是编号 ...

  9. jqueryIFrame框架内元素操作

    //获取框架内元素 $(document.getElementById('main').contentWindow.document.body).find("#txtRD_Num" ...

  10. coreseek(sphinx)安装2(mysql数据源配置和测试)

    Windows操作系统下 mysql数据源配置: 主要步骤:  配置mysql数据源配置文件->生成索引->开启索引   (三步) coreseek\etc\csft_mysql.conf ...