- 浏览: 309370 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
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 1311//在s串中查找与s1相匹配的字符串,找到后用s2将s中与 ... -
c语言编程之信号灯
2010-01-26 15:37 2309#include <stdio.h> #in ... -
c语言编程之消息队列
2010-01-26 14:24 11965//msg.c #include <stdio.h ... -
c语言编程基础之IPC共享内存
2010-01-25 21:02 4709共享内存(Shared Memory) ... -
c语言相关书籍收藏
2010-01-25 20:23 906c函数速查chm版 软件编程规范培训实例与练习 -
c语言编程基础之日志记录
2010-01-25 10:25 3934#include <unistd.h> #i ... -
c语言编程基础之数据库操作
2010-01-23 00:12 1645查询: vi opsql.ec EXEC SQL incl ... -
c语言编程基础之文件操作(二)
2010-01-22 13:38 671数据块读写函数fread和fwtrite C语言还提供 ... -
c语言编程基础之文件操作
2010-01-22 09:46 1214文件使用方式 意义 “rt ... -
sco unix下informix数据库基本操作笔记
2010-01-21 15:07 1918启动数据库: oninit 进入操作界面 is ... -
指针学习笔记
2010-01-21 14:40 818main() { int a,b; int ... -
条件编译-结构体的使用
2010-01-21 13:41 1204main() { struct stu { ... -
c语言基础教程
2010-01-20 20:43 905c语言基础教程 -
socket网络编程基础
2010-01-20 14:02 841/*service.c*/ #include<st ... -
shell操作菜单
2009-12-15 16:53 1148#!/bin/sh #The path of she ... -
Linux Unix命令及shell编程-学习笔记-未完待续
2009-12-13 20:29 1145Linux Unix命令及shell编程 1.Linux U ... -
Tuxedo中间件开发与管理-学习笔记-未完待续
2009-12-13 20:28 1451Tuxedo中间件开发与管理 1.Tuxedo系统介绍 1 ... -
GCC编译器使用学习笔记(三)
2009-12-13 00:19 1592GCC编译器使用学习笔记(三) gcc debug gcc ... -
C语言库函数,Linux C语言函数大全,C语言编程宝典
2009-12-11 23:18 1864C语言库函数,Linux C语言函数大全,C语言编程宝典 -
centos下安装oracle9i笔记
2009-12-10 17:20 1445centos下安装oracle9i笔记 --初始启动字符界面 ...
相关推荐
主要为大家详细介绍了非常简单的Shell菜单脚本,傻瓜式的人机交互,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Linux Shell编程 。Shell菜单程序源代码
shell 菜单编程 shell 菜单编程 shell 菜单编程
模拟shell命令解释器操作系统课程设计报告 在Linux/Unix上用C语言开发一个下命令解释程序,软件能在Linux/Unix平台下运行,该程序应提供一个命令提示符:如ysh>,表示接收用户的输入,每次执行完成后再打印下一个...
1、一个简单的shell菜单项例子,没有实际作用。 2、codeproject上的一个copypath的例子,做了扩充,可以拷贝文件路径、文件夹路径和磁盘路径。 3、一个文件属性页例子、可以展示出一个dll所依赖的其它dll文件。 ...
使用ATL和Crypto ++创建文件校验和Shell菜单扩展
windowsShell 增加右键菜单及对应图标,通过右键菜单打开自定义应用程序,已在window10 和window7 64位上测试验证。
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=”/...
com atl shell extension给windows右键菜单添加菜单项.zip
vs2017创建的项目,完整的代码,可直接编译,也可以直接使用已编译好的dll。 代码带有详细的注释,可供学习。
在solaris环境下,基于shell编程,编写的一个菜单选择并执行的界面模板,使用者可以根据实际需要更改执行的子程序内容;
VC Windows Shell扩展,设计 制作 上下文菜单扩展,响应右键消息菜单,当用户点击我们添加的菜单项时该方法将被调用。将生成的菜单插入到shell上下文菜单中,返回插入的菜单数,一定要返回正确,包括生成的父菜单也...
shell编写 shell编写 shell编写
Classic Shell win 7、8、8.1、10 经典开始菜单
Classic Shell是一款Windows经典开始菜单恢复工具,能够为你的WIN8/8.1系统找回熟悉的开始菜单。安装包括经典资源管理器:经典资源管理器能为系统的资源管理器添加一个包含复制、粘贴、向上等按钮的工具条,替换...
#!/bin/sh echo "******************************************************************" echo " * MENU *" echo " * 1.copy 2.rename *" echo " * 3.remove 4.find *" echo " * 5.exit *" echo "******************...
Windows Shell扩展编程傻瓜手册大全:上下文菜单扩展,详细解说
Classic Shell 相比之前介绍的开始菜单软件要更强大,包含 Classic Explorer 以及 Classic Start Menu,我们只需要安装 Classic Start Menu(开始菜单),Cllassic shell 支持 Win10/Win8/Vista/Win7模拟传统开始菜单...
com atl shell extension往windows右键菜单上添加自定义菜单项.zip
COM ATL SHELL EXTENSION右击文件-给右键菜单中添加新的菜单项.zip