- 浏览: 318673 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
js调用excel、word打印 -
jyangzi5:
[u][/u]引用
常见hibernate面试题 -
wangv:
<code="java">Sy ...
常见hibernate面试题 -
bardo:
建议看看这一个
http://bardo.iteye.com ...
金额数字转中文大写 -
dotjar:
在继续讲解HQL其他更为强大的查询功能前,我们先来讲解以下利用 ...
常见hibernate面试题
SHELL菜单的编写从此变得如此简单
完善的流程控制
简洁精美的界面
将下面的代码分别存为3个文件: msh.etc, msh.fun, msh.sh
执行msh.sh,看一下效果吧
只要修改msh.etc和msh.fun文件,就可以生成自己的菜单了,不用再写程序了
-------------------msh.etc-----------------------------
MAINMENU 超级SHELL主控菜单
1 子菜单 submenu
1-1 功能1 fun101 0
1-2 当前日期 fun102 0 1-1
2 功能函数2 fun2 1 1-1
-------------------end----------------------------------
-------------------msh.fun------------------------------
fun101(){
echo "团结就是力量!!"
}
fun102(){
date
}
fun2(){
echo "神仙?妖怪?"
}
-------------------end--------------------------------------
-------------------msh.sh----------------------------------
#!/bin/sh
srcfile="./msh.etc"
funfile="./msh.fun"
etcfile="./.msh"
currlevel="1"
current=
currmenu="0"
choice=
title=
cmd=
redoflg=
dependflg=
status=
errmsg=
blank=" "
. $funfile
__showmenu(){
clear
awk -v BLANK="$blank" '$1 ~ /^MAINMENU$/{printf "\n\n\n\n%s%s\n",BLANK,$2}' $srcfile
printf " ----------------------------------\n"
if [ $1 = "0" ]
then
expression="\$1 ~ /^.\$/"
else
expression="\$1 ~ /^$1-.\$/"
fi
awk -v BLANK="$blank" -v ETCFILE="$etcfile" -v MENUID="$1" \
'BEGIN{\
while ( getline tracelog < ETCFILE == 1 ){\
split(tracelog,menuid);\
idstatus[menuid[1]]=menuid[2];\
}\
}\
{ \
if ('"$expression"'){ \
if ($3!="submenu"){\
sign="*";\
}\
else{\
sign="";\
}\
if (idstatus[$1]=="0"){\
status=" √";\
}\
else if (idstatus[$1]==""){\
status="";\
}\
else{\
status=" @@";\
}\
print BLANK $1" "$2 sign status; \
lastid=$1;\
} \
}\
END{\
if ( idstatus[MENUID]=="" && idstatus[lastid]=="0" ){\
print MENUID " 0" >> ETCFILE;
}\
}' $srcfile
printf "${blank}q 退出\n"
printf "请输入选择:"
}
__getfunc(){
__i=0
title=
cmd=
redoflg=
dependflg=
for __p in `awk '{ if ($1 ~ /^'"$current"'$/)print $0 }' $srcfile`
do
__i=`expr $__i + 1`
if [ $__i -eq 2 ]
then
title=$__p
elif [ $__i -eq 3 ]
then
cmd=$__p
elif [ $__i -eq 4 ]
then
redoflg=$__p
elif [ $__i -eq 5 ]
then
dependflg=$__p
fi
done
}
submenu(){
currlevel=`expr $currlevel + 1`
currmenu="$current"
}
__upmenu(){
currlevel=`expr $currlevel - 1`
if [ "$currlevel" = "1" ]
then
currmenu="0"
else
__len=`expr $currlevel \* 2 - 3`
currmenu=`printf "%."$__len"s" $currmenu`
fi
}
__getcmd(){
read choice
if [ "X$choice" = "Xq" ]
then
if [ "X$currlevel" = "X1" ]
then
cmd="QUIT"
else
cmd="__upmenu"
fi
else
if [ "X$currlevel" = "X1" ]
then
current=$choice
else
__len=`expr $currlevel \* 2 - 3`
current=`printf "%."$__len"s" $current`"-$choice"
fi
__getfunc
fi
}
__cmdcheck(){
if [ "X$cmd" = "Xsubmenu" -o "X$cmd" = "X__upmenu" ]
then
return 1
fi
__statuslist=`awk -v depend=$dependflg '{if ($1 == depend)print $2}' $etcfile`
__status=`echo $__statuslist | awk '{print $NF}'`
if [ ! "X$dependflg" = "X" -a ! "X$__status" = "X0" ]
then
errmsg=`echo "该步依赖于步骤[$dependflg],但此步未执行或执行失败"`
return 0
fi
__statuslist=`awk -v current=$current '{if ($1 == current)print $2}' $etcfile`
__status=`echo $__statuslist | awk '{print $NF}'`
if [ "X$redoflg" = "X0" -a "X$__status" = "X0" ]
then
errmsg=`echo "该步不能重复执行"`
return 0
fi
return 1
}
__exec(){
if [ ! "X$cmd" = "X" ]
then
__cmdcheck
if [ $? -eq 1 ]
then
$cmd
status=$?
if [ ! "X$cmd" = "Xsubmenu" -a ! "X$cmd" = "X__upmenu" ]
then
printf "%s %s %s\n" $current $status `date +%Y/%m/%d-%H:%M:%S` >> $etcfile
echo "执行结束,按回车键返回"
read __a
fi
else
echo "$errmsg"
read __a
fi
fi
}
if [ ! -f $etcfile ]
then
> $etcfile
fi
while true
do
__showmenu $currmenu
__getcmd
if [ "X$cmd" = "XQUIT" ]
then
printf "确定要退出吗(y/n)?"
read __ok
if [ "X$__ok" = "Xy" ]
then
break
else
continue
fi
elif [ "X$cmd" = "XE" ]
then
continue
else
__exec
fi
done
rm -f $etcfile
------------------------end----------------------------------
完善的流程控制
简洁精美的界面
将下面的代码分别存为3个文件: msh.etc, msh.fun, msh.sh
执行msh.sh,看一下效果吧
只要修改msh.etc和msh.fun文件,就可以生成自己的菜单了,不用再写程序了
-------------------msh.etc-----------------------------
MAINMENU 超级SHELL主控菜单
1 子菜单 submenu
1-1 功能1 fun101 0
1-2 当前日期 fun102 0 1-1
2 功能函数2 fun2 1 1-1
-------------------end----------------------------------
-------------------msh.fun------------------------------
fun101(){
echo "团结就是力量!!"
}
fun102(){
date
}
fun2(){
echo "神仙?妖怪?"
}
-------------------end--------------------------------------
-------------------msh.sh----------------------------------
#!/bin/sh
srcfile="./msh.etc"
funfile="./msh.fun"
etcfile="./.msh"
currlevel="1"
current=
currmenu="0"
choice=
title=
cmd=
redoflg=
dependflg=
status=
errmsg=
blank=" "
. $funfile
__showmenu(){
clear
awk -v BLANK="$blank" '$1 ~ /^MAINMENU$/{printf "\n\n\n\n%s%s\n",BLANK,$2}' $srcfile
printf " ----------------------------------\n"
if [ $1 = "0" ]
then
expression="\$1 ~ /^.\$/"
else
expression="\$1 ~ /^$1-.\$/"
fi
awk -v BLANK="$blank" -v ETCFILE="$etcfile" -v MENUID="$1" \
'BEGIN{\
while ( getline tracelog < ETCFILE == 1 ){\
split(tracelog,menuid);\
idstatus[menuid[1]]=menuid[2];\
}\
}\
{ \
if ('"$expression"'){ \
if ($3!="submenu"){\
sign="*";\
}\
else{\
sign="";\
}\
if (idstatus[$1]=="0"){\
status=" √";\
}\
else if (idstatus[$1]==""){\
status="";\
}\
else{\
status=" @@";\
}\
print BLANK $1" "$2 sign status; \
lastid=$1;\
} \
}\
END{\
if ( idstatus[MENUID]=="" && idstatus[lastid]=="0" ){\
print MENUID " 0" >> ETCFILE;
}\
}' $srcfile
printf "${blank}q 退出\n"
printf "请输入选择:"
}
__getfunc(){
__i=0
title=
cmd=
redoflg=
dependflg=
for __p in `awk '{ if ($1 ~ /^'"$current"'$/)print $0 }' $srcfile`
do
__i=`expr $__i + 1`
if [ $__i -eq 2 ]
then
title=$__p
elif [ $__i -eq 3 ]
then
cmd=$__p
elif [ $__i -eq 4 ]
then
redoflg=$__p
elif [ $__i -eq 5 ]
then
dependflg=$__p
fi
done
}
submenu(){
currlevel=`expr $currlevel + 1`
currmenu="$current"
}
__upmenu(){
currlevel=`expr $currlevel - 1`
if [ "$currlevel" = "1" ]
then
currmenu="0"
else
__len=`expr $currlevel \* 2 - 3`
currmenu=`printf "%."$__len"s" $currmenu`
fi
}
__getcmd(){
read choice
if [ "X$choice" = "Xq" ]
then
if [ "X$currlevel" = "X1" ]
then
cmd="QUIT"
else
cmd="__upmenu"
fi
else
if [ "X$currlevel" = "X1" ]
then
current=$choice
else
__len=`expr $currlevel \* 2 - 3`
current=`printf "%."$__len"s" $current`"-$choice"
fi
__getfunc
fi
}
__cmdcheck(){
if [ "X$cmd" = "Xsubmenu" -o "X$cmd" = "X__upmenu" ]
then
return 1
fi
__statuslist=`awk -v depend=$dependflg '{if ($1 == depend)print $2}' $etcfile`
__status=`echo $__statuslist | awk '{print $NF}'`
if [ ! "X$dependflg" = "X" -a ! "X$__status" = "X0" ]
then
errmsg=`echo "该步依赖于步骤[$dependflg],但此步未执行或执行失败"`
return 0
fi
__statuslist=`awk -v current=$current '{if ($1 == current)print $2}' $etcfile`
__status=`echo $__statuslist | awk '{print $NF}'`
if [ "X$redoflg" = "X0" -a "X$__status" = "X0" ]
then
errmsg=`echo "该步不能重复执行"`
return 0
fi
return 1
}
__exec(){
if [ ! "X$cmd" = "X" ]
then
__cmdcheck
if [ $? -eq 1 ]
then
$cmd
status=$?
if [ ! "X$cmd" = "Xsubmenu" -a ! "X$cmd" = "X__upmenu" ]
then
printf "%s %s %s\n" $current $status `date +%Y/%m/%d-%H:%M:%S` >> $etcfile
echo "执行结束,按回车键返回"
read __a
fi
else
echo "$errmsg"
read __a
fi
fi
}
if [ ! -f $etcfile ]
then
> $etcfile
fi
while true
do
__showmenu $currmenu
__getcmd
if [ "X$cmd" = "XQUIT" ]
then
printf "确定要退出吗(y/n)?"
read __ok
if [ "X$__ok" = "Xy" ]
then
break
else
continue
fi
elif [ "X$cmd" = "XE" ]
then
continue
else
__exec
fi
done
rm -f $etcfile
------------------------end----------------------------------
发表评论
-
c语言编程之字符串操作
2010-01-26 16:43 1354//在s串中查找与s1相匹配的字符串,找到后用s2将s中与 ... -
c语言编程之信号灯
2010-01-26 15:37 2379#include <stdio.h> #in ... -
c语言编程之消息队列
2010-01-26 14:24 12103//msg.c #include <stdio.h ... -
c语言编程基础之IPC共享内存
2010-01-25 21:02 4771共享内存(Shared Memory) ... -
c语言相关书籍收藏
2010-01-25 20:23 978c函数速查chm版 软件编程规范培训实例与练习 -
c语言编程基础之日志记录
2010-01-25 10:25 3968#include <unistd.h> #i ... -
c语言编程基础之数据库操作
2010-01-23 00:12 1690查询: vi opsql.ec EXEC SQL incl ... -
c语言编程基础之文件操作(二)
2010-01-22 13:38 738数据块读写函数fread和fwtrite C语言还提供 ... -
c语言编程基础之文件操作
2010-01-22 09:46 1287文件使用方式 意义 “rt ... -
sco unix下informix数据库基本操作笔记
2010-01-21 15:07 1954启动数据库: oninit 进入操作界面 is ... -
指针学习笔记
2010-01-21 14:40 870main() { int a,b; int ... -
条件编译-结构体的使用
2010-01-21 13:41 1260main() { struct stu { ... -
c语言基础教程
2010-01-20 20:43 981c语言基础教程 -
socket网络编程基础
2010-01-20 14:02 884/*service.c*/ #include<st ... -
shell操作菜单
2009-12-15 16:53 1188#!/bin/sh #The path of she ... -
Linux Unix命令及shell编程-学习笔记-未完待续
2009-12-13 20:29 1184Linux Unix命令及shell编程 1.Linux U ... -
Tuxedo中间件开发与管理-学习笔记-未完待续
2009-12-13 20:28 1506Tuxedo中间件开发与管理 1.Tuxedo系统介绍 1 ... -
GCC编译器使用学习笔记(三)
2009-12-13 00:19 1620GCC编译器使用学习笔记(三) gcc debug gcc ... -
C语言库函数,Linux C语言函数大全,C语言编程宝典
2009-12-11 23:18 1941C语言库函数,Linux C语言函数大全,C语言编程宝典 -
centos下安装oracle9i笔记
2009-12-10 17:20 1488centos下安装oracle9i笔记 --初始启动字符界面 ...
相关推荐
本文介绍的“非常简单的Shell菜单脚本”就是一种基础的Shell脚本应用,它创建了一个简单的菜单系统,使用户能够通过选择编号来执行不同的功能,实现了人机交互的“傻瓜式”操作。 首先,脚本通过`#!/bin/sh`行指定...
### Shell菜单程序源代码知识点解析 #### 一、概述 在Linux系统中,Shell脚本是一种非常实用且强大的工具,可以用来实现各种自动化任务。本文将深入解析一个Shell菜单程序的源代码,帮助读者理解其功能及实现原理...
shell 菜单编程 shell 菜单编程 shell 菜单编程
标题中的“文件校验和Shell菜单扩展DLL”指的是一个Windows操作系统下的功能增强工具,它允许用户通过右键菜单快速计算并验证文件的校验和。校验和是一种用于验证文件完整性的技术,常用于检查文件在传输或存储过程...
### 模拟Shell命令解释器的关键知识点 #### 设计目的 - **开发环境与目标**:本项目旨在通过使用C语言,在Linux/Unix平台上开发一个命令解释器程序。该程序的目标是模仿现有的shell命令行界面的功能,从而为用户...
在IT领域,Shell扩展是一种非常实用的技术,它允许开发者自定义Windows操作系统的上下文菜单,即用户通过右键点击文件或文件夹时出现的菜单。本项目基于Visual Studio 2017,提供了完整的源代码,可以用于创建一个名...
其中一个脚本展示了如何设计一个简单的Shell菜单,使用`until`循环和`case`语句来构建多级菜单,允许用户选择执行不同的命令,如列出目录、改变目录、编辑文件、删除文件或退出菜单。 ### 知识点七:变量赋值与输出...
1、一级菜单 2、二级菜单 3、执行操作 脚本参考: 代码如下: #!/bin/bash #author lic(oldboy linux student) #date 1304 DISK_NO=”/dev/sda1″ NGINX_DIR=”/usr/local/tdoa/nginx/sbin/nginx” MYSQL_DIR=”/...
在Windows操作系统中,Shell编程是一种用于扩展或定制用户界面的方式,特别是涉及到桌面环境、文件管理器(如资源管理器)以及右键快捷菜单。本文将深入探讨如何利用Windows Shell编程来添加自定义的右键菜单及其...
1、一个简单的shell菜单项例子,没有实际作用。 2、codeproject上的一个copypath的例子,做了扩充,可以拷贝文件路径、文件夹路径和磁盘路径。 3、一个文件属性页例子、可以展示出一个dll所依赖的其它dll文件。 ...
ATL COM Shell 扩展是一种在Windows操作系统中增强文件管理器功能的技术,它允许开发者创建自定义的右键菜单项,以实现特定的功能。在这个场景中,我们关注的是如何使用ATL COM(Component Object Model)来创建一个...
通过以上步骤,你可以构建一个基本的交互式shell菜单系统。随着你对shell编程的深入,可以添加更多的复杂功能,如错误检查、输入验证,甚至可以使用更高级的脚本结构来实现更复杂的菜单系统。在实践中,不断地尝试和...
上下文菜单扩展是Shell扩展的一种常见形式,它允许开发者在用户右键点击文件或文件夹时添加自定义的操作选项。这篇"Windows Shell扩展编程傻瓜手册大全:上下文菜单扩展"详细介绍了如何实现这一功能。 首先,开发上...
在solaris环境下,基于shell编程,编写的一个菜单选择并执行的界面模板,使用者可以根据实际需要更改执行的子程序内容;
Shell Extension可以扩展Windows资源管理器的功能,比如我们看到的右键菜单就是Shell Extension的一个应用。当用户在文件或文件夹上点击鼠标右键时,Shell Extension会根据注册表中的设置显示额外的菜单选项。 在这...
#### 实例七:标准AT&T Bourne Shell菜单脚本 该脚本也是基于一个类似的菜单系统,但使用的是标准的AT&T Bourne Shell语法。 **脚本内容:** ```bash #!/bin/sh # Standard AT&T Bourne Shell # The Party Program ...
VC Windows Shell扩展,设计 制作 上下文菜单扩展,响应右键消息菜单,当用户点击我们添加的菜单项时该方法将被调用。将生成的菜单插入到shell上下文菜单中,返回插入的菜单数,一定要返回正确,包括生成的父菜单也...
Shell编写是Linux或Unix系统中的一种重要技能,它涉及到脚本编程、命令行交互以及系统自动化操作。在本文中,我们将深入探讨Shell脚本的基本概念、语法结构、常见命令及其实用技巧,帮助你掌握这一强大的工具。 ...
Classic Shell win 7、8、8.1、10 经典开始菜单
Classic Shell是一款Windows经典开始菜单恢复工具,能够为你的WIN8/8.1系统找回熟悉的开始菜单。安装包括经典资源管理器:经典资源管理器能为系统的资源管理器添加一个包含复制、粘贴、向上等按钮的工具条,替换...