📄 338.html
字号:
<TD background="images/bgi.gif" tppabs="http://www.linuxhero.com/docs/images/bgi.gif"
height=30></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=3 width="95%"
align=center border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=3 width="100%"
border=0>
<TBODY>
<TR>
<TD vAlign=top>
<p><FONT class=normalfont><B><font color=blue>关于KSH中select建立菜单的问题</font></B></FONT><BR><FONT class=smallfont color=#ff9900>2004-04-23 15:18 pm</FONT><BR><FONT class=normalfont>作者:作者<br>来自:Linux知识宝库<br>联系方式:无名<br><br>什么选择一条完成后,不是返回菜单,一定要按回车才可以,这个shell有什么问题吗?<br>
我在bash环境和在ksh下,表现有所不同,在KSH下,所有选择是在一列,而在bash下,是一行有两个选项,请问是怎么回事?<br>
<br>
另外就是在bash下,菜单的表现是正常的,但是在ksh下,不能直接返回原先的菜单,请问是什么原因?<br>
<br>
select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "exit!"<br>
do<br>
case $ch in<br>
"monitor network!")<br>
netm<br>
;;<br>
"monitor running process!")<br>
prom<br>
;;<br>
"monitor system!")<br>
sysm<br>
;;<br>
"monitor oracle!")<br>
oram<br>
;;<br>
"exit!")<br>
break;;<br>
esac<br>
done<br>
<br>
<br>
<br>
<br>
就是这样的,每种SHELL有不同表现也是正常的。KSH就是需要再拍一下回车才出菜单。可以在前面加一句。<br>
<br>
PS3="(choose 1-5, or hit RETURN prints menu) "<br>
<br>
<br>
哦!多谢指点!还有一个问题,就是我想在这个菜单前面加个说明,就是每次菜单出来都是这个样子:<br>
*************************************<br>
* system&network monitor program *<br>
* version: 1.0 *<br>
*************************************<br>
1) monitor network<br>
2) monitor system<br>
......<br>
5)exit<br>
<br>
请问这个前面的说明应该加到哪里? <br>
<br>
<br>
<br>
<br>
下面引用由happydog在 2002/11/30 04:46pm 发表的内容:<br>
哦!多谢指点!还有一个问题,就是我想在这个菜单前面加个说明,就是每次菜单出来都<br>
<br>
<br>
<br>
不客气。(我原来的帐号不知咋的登不上了,还都清了零。气死我了。。。)<br>
<br>
select 本身没这种功能。但是改成下面这个样子可以基本达到你的要求。(而且在 ksh 中也不需要再按回车键了。)<br>
<br>
。。。<br>
echo '<br>
*************************************<br>
* system&network monitor program *<br>
* version: 1.0 *<br>
*************************************<br>
'<br>
<br>
select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "exit!"<br>
do<br>
case $ch in<br>
"monitor network!")<br>
netm<br>
exec $0<br>
;;<br>
"monitor running process!")<br>
prom<br>
exec $0<br>
;;<br>
"monitor system!")<br>
sysm<br>
exec $0<br>
;;<br>
"monitor oracle!")<br>
oram<br>
exec $0<br>
;;<br>
"exit!")<br>
break<br>
;;<br>
*) exec $0<br>
;;<br>
esac<br>
done<br>
。。。 <br>
<br>
<br>
<br>
<br>
<br>
dx,这个似乎只对主菜单起作用,我进到子菜单中,每选择一项作完后,都直接返回主菜单,而不是返回本身的菜单,请问这个exec $0具体是什么含义,我看书上说是打开标准输入和输出,房在这里的作用是怎样的?$0 表示就是你在执行的这个文件本身的文件名(它应该有执行位-x),这样当你呼叫 exec $0 时,其实就相当于又执行了一遍这个脚本。<br>
<br>
所以你说的“每选择一项作完后,都直接返回主菜单,而不是返回本身的菜单”,就应该显而易见了。<br>
<br>
可以用下面的方式解决。我只写了一小部分子程序,每个菜单的第2个选项进入下级菜单,5返回上级菜单,6退出程序(主菜单除外)。其余的子程序你依样画葫芦,然后根据自己的要求作适当调整就可以了。<br>
<br>
<br>
祝好运。<br>
<br>
代码:<br>
<br>
<br>
#!/usr/bin/ksh <br>
<br>
######################################## <br>
# define subroutines <br>
<br>
# this is your process monitoring subroutine <br>
prom() { <br>
echo ' <br>
+===================================+ <br>
| Menu level 2 -- routine prom | <br>
+===================================+ <br>
' <br>
select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "back" "exit" <br>
do <br>
case $ch in <br>
"monitor network!") <br>
netm <br>
prom <br>
;; <br>
"monitor running process!") <br>
abc <br>
prom <br>
;; <br>
"monitor system!") <br>
sysm <br>
prom <br>
;; <br>
"monitor oracle!") <br>
oram <br>
prom <br>
;; <br>
"back") <br>
exec $0 <br>
;; <br>
"exit") <br>
exit 0 <br>
;; <br>
esac <br>
done <br>
<br>
} <br>
<br>
# another subroutine <br>
<br>
abc () { <br>
echo ' <br>
+-----------------------------------+ <br>
| Menu level 3 -- routine abc | <br>
+-----------------------------------+ <br>
' <br>
<br>
select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "back" "exit" <br>
do <br>
case $ch in <br>
"monitor network!") <br>
dosomething1 <br>
abc <br>
;; <br>
"monitor running process!") <br>
dosomething2 <br>
abc <br>
;; <br>
"monitor system!") <br>
dosomething3 <br>
abc <br>
;; <br>
"monitor oracle!") <br>
dosomething4 <br>
abc <br>
;; <br>
"back") <br>
prom <br>
;; <br>
"exit") <br>
exit 0 <br>
;; <br>
esac <br>
done <br>
} <br>
<br>
# end <br>
########################################## <br>
<br>
<br>
########################################## <br>
# main program <br>
<br>
echo ' <br>
************************************* <br>
* system&network monitor program * <br>
* version: 1.0 * <br>
************************************* <br>
' <br>
<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -