分享
 
 
 

关于KSH中select建立菜单的问题

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

什么选择一条完成后,不是返回菜单,一定要按回车才可以,这个shell有什么问题吗?

我在bash环境和在ksh下,表现有所不同,在KSH下,所有选择是在一列,而在bash下,是一行有两个选项,请问是怎么回事?

另外就是在bash下,菜单的表现是正常的,但是在ksh下,不能直接返回原先的菜单,请问是什么原因?

select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "exit!"

do

case $ch in

"monitor network!")

netm

;;

"monitor running process!")

prom

;;

"monitor system!")

sysm

;;

"monitor oracle!")

oram

;;

"exit!")

break;;

esac

done

就是这样的,每种SHELL有不同表现也是正常的。KSH就是需要再拍一下回车才出菜单。可以在前面加一句。

PS3="(choose 1-5, or hit RETURN prints menu) "

哦!多谢指点!还有一个问题,就是我想在这个菜单前面加个说明,就是每次菜单出来都是这个样子:

*************************************

* system&network monitor program *

* version: 1.0 *

*************************************

1) monitor network

2) monitor system

......

5)exit

请问这个前面的说明应该加到哪里?

下面引用由happydog在 2002/11/30 04:46pm 发表的内容:

哦!多谢指点!还有一个问题,就是我想在这个菜单前面加个说明,就是每次菜单出来都

不客气。(我原来的帐号不知咋的登不上了,还都清了零。气死我了。。。)

select 本身没这种功能。但是改成下面这个样子可以基本达到你的要求。(而且在 ksh 中也不需要再按回车键了。)

。。。

echo '

*************************************

* system&network monitor program *

* version: 1.0 *

*************************************

'

select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "exit!"

do

case $ch in

"monitor network!")

netm

exec $0

;;

"monitor running process!")

prom

exec $0

;;

"monitor system!")

sysm

exec $0

;;

"monitor oracle!")

oram

exec $0

;;

"exit!")

break

;;

*) exec $0

;;

esac

done

。。。

dx,这个似乎只对主菜单起作用,我进到子菜单中,每选择一项作完后,都直接返回主菜单,而不是返回本身的菜单,请问这个exec $0具体是什么含义,我看书上说是打开标准输入和输出,房在这里的作用是怎样的?$0 表示就是你在执行的这个文件本身的文件名(它应该有执行位-x),这样当你呼叫 exec $0 时,其实就相当于又执行了一遍这个脚本。

所以你说的“每选择一项作完后,都直接返回主菜单,而不是返回本身的菜单”,就应该显而易见了。

可以用下面的方式解决。我只写了一小部分子程序,每个菜单的第2个选项进入下级菜单,5返回上级菜单,6退出程序(主菜单除外)。其余的子程序你依样画葫芦,然后根据自己的要求作适当调整就可以了。

祝好运。

代码:

#!/usr/bin/ksh

########################################

# define subroutines

# this is your process monitoring subroutine

prom() {

echo '

+===================================+

| Menu level 2 -- routine prom |

+===================================+

'

select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "back" "exit"

do

case $ch in

"monitor network!")

netm

prom

;;

"monitor running process!")

abc

prom

;;

"monitor system!")

sysm

prom

;;

"monitor oracle!")

oram

prom

;;

"back")

exec $0

;;

"exit")

exit 0

;;

esac

done

}

# another subroutine

abc () {

echo '

+-----------------------------------+

| Menu level 3 -- routine abc |

+-----------------------------------+

'

select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "back" "exit"

do

case $ch in

"monitor network!")

dosomething1

abc

;;

"monitor running process!")

dosomething2

abc

;;

"monitor system!")

dosomething3

abc

;;

"monitor oracle!")

dosomething4

abc

;;

"back")

prom

;;

"exit")

exit 0

;;

esac

done

}

# end

##########################################

##########################################

# main program

echo '

*************************************

* system&network monitor program *

* version: 1.0 *

*************************************

'

select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "exit!"

do

case $ch in

"monitor network!")

netm

exec $0

;;

"monitor running process!")

prom

exec $0

;;

"monitor system!")

sysm

exec $0

;;

"monitor oracle!")

oram

exec $0

;;

"exit!")

break

;;

*) exec $0

;;

esac

done

感谢DX再次帮助,已经快到成功的彼岸了,只是还有最后一个小小的问题,就是从二级菜单返回主菜单的时候,用exec $0,报错,错误是prom [46]:not found.这个时候,$0应该是指的prom,我用echo $0验证过,是这样,但是直接调用本身可以,换成exec $0,就不行了,并且我是想从二级菜单返回一级菜单。我换为break,但是不稳定,总是不能如我的想法一样返回主菜单。

其他都已经OK!了,从三级菜单返回到二级都很正常。

是不是我哪个参数设置的不对?

不知道怎么会这样,难道你的KSH和我的还不一样?我在OpenBSD的KSH下运行通过的,而且管是$0还是break,都能很好地运行。是不是你没设定 -x 可执行位?(必须!)

不管它了!用其它方法解决,既然你说3级回到2级没问题,那么建议你把程序的最后一段放入子程序main,应该就行了。。。(同样在我的机器上已通过验证)

代码:

#!/bin/ksh # <============== 可能会与你不一样

########################################

# define subroutines

# this is your process monitoring subroutine

prom() {

echo '

+===================================+

| Menu level 2 -- routine prom |

+===================================+

'

select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "back" "exit"

do

case $ch in

"monitor network!")

netm

prom

;;

"monitor running process!")

abc

prom

;;

"monitor system!")

sysm

prom

;;

"monitor oracle!")

oram

prom

;;

"back")

main # <==================== 修改!

;;

"exit")

exit 0

;;

esac

done

}

# another subroutine

abc () {

echo '

+-----------------------------------+

| Menu level 3 -- routine abc |

+-----------------------------------+

'

select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "back" "exit"

do

case $ch in

"monitor network!")

dosomething1

abc

;;

"monitor running process!")

dosomething2

abc

;;

"monitor system!")

dosomething3

abc

;;

"monitor oracle!")

dosomething4

abc

;;

"back")

prom

;;

"exit")

exit 0

;;

esac

done

}

# end

##########################################

##########################################

# main program

main() { # <============== 加入

echo '

*************************************

* system&network monitor program *

* version: 1.0 *

*************************************

'

select ch in "monitor network!" "monitor running process!" "monitor system!" "monitor oracle!" "exit!"

do

case $ch in

"monitor network!")

netm

exec $0

;;

"monitor running process!")

prom

exec $0

;;

"monitor system!")

sysm

exec $0

;;

"monitor oracle!")

oram

exec $0

;;

"exit!")

break

;;

*) exec $0

;;

esac

done

} # <============== 加入

main # <============== 加入

老大!可以了!用main可以了!我没有想到直接这样调用就可以解决问题!牛叉啊!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有