⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 338.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 3 页
字号:
                            <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 + -