设为首页 收藏本站
查看: 1086|回复: 0

shell脚本实例之菜单样例

[复制链接]

尚未签到

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



DSC0000.png

图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
  
  



[iyunv@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
[iyunv@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
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-146972-1-1.html 上篇帖子: 苹果Mac OS系统shell命令大全介绍 下篇帖子: 可显示Android设备选择列表,并进入指定Android设备Console的Shell脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表