DCL编程 - 远程连接

问题描述:

首先,我是一个全新的,不应该被允许在键盘周围。也就是说,我正在尝试编写一个DCL .COM文件,该文件允许用户通过从列表中选择来连接到远程设备。DCL编程 - 远程连接

我想要做的就是让他们选择一个设备并进行连接,然后当他们与设备断开连接时,返回他们开始的位置。在我终止远程连接后,它一直将我抛出。

操作系统是OpenVMS。这里是代码(其中xxx.xxx.xxx.xxx将是远程系统的IP地址)。

任何帮助将不胜感激!

$!  MRV Terminal Server Connection Menu 
$!  
$ ON ERROR THEN $ LOGOUT 
$ GOMENU: 
$! 
$ CLS:==SET TERM/WIDTH=80 
$ WT:==WRITE SYS$OUTPUT 
$! 
$ CLS 
$ WT " MRV Terminal Server Connection Menu " 
$ WT " " 
$ WT " 1  MRV 1" 
$ WT " 2  MRV 2" 
$ WT " 3  MRV 3" 
$ WT " 4  MRV 4" 
$ WT " 5  MRV 5" 
$ WT " 6  MRV 6" 
$ WT " 7  MRV 7" 
$ WT " 8  MRV 8" 
$ WT " 9  MRV 9" 
$ WT " 10  MRV 10" 
$ WT " 11  MRV 11" 
$ WT " 12  MRV 12" 
$ WT " 13  MRV 13" 
$ WT " 14  MRV 14" 
$ WT " " 
$ WT " " 
$ WT " " 
$ WT " " 
$ WT " "          
$ WT " X  EXIT" 
$ WT " " 
$ INQUIRE ANS "Select the MRV you wish to connect to:" 
$! 
$! 
$ IF ANS .EQS. "X" then goto goodbye 
$!           
$! 
$ IF ANS .EQS. "1" then SSH "[email protected]" 
$! 
$ IF ANS .EQS. "2" then SSH "[email protected]"  
$! 
$ IF ANS .EQS. "3" then SSH "[email protected]" 
$! 
$ IF ANS .EQS. "4" then SSH "[email protected]" 
$! 
$ IF ANS .EQS. "5" then SSH "[email protected]" 
$! 
$ IF ANS .EQS. "6" then SSH "[email protected]" 
$! 
$ IF ANS .EQS. "7" then SSH "[email protected]" 
$! 
$ IF ANS .EQS. "8" then SSH "[email protected]" 
$! 
$ IF ANS .EQS. "9" then SSH "[email protected]" 
$! 
$ IF ANS .EQS. "10" then SSH "[email protected]" 
$!           
$ IF ANS .EQS. "11" then SSH "[email protected]" 
$!             
$ IF ANS .EQS. "12" then SSH "[email protected]"   
$!    
$ IF ANS .EQS. "13" then SSH "[email protected]" 
$!    
$ GOODBYE: 
$!EXIT 
+0

有隐隐有些非技术性的关于“倾我出去”和“回来,他们开始”。你能澄清一点吗?在最后一个if后添加'$ goto GoMenu'应该让你保存在存储过程中(如果这是你的目标)。如果SSH在会话终止时退出时出现错误,那么'$ on error GoMenu'可能会有所帮助。 [参考文献](http://h41379.www4.hpe.com/doc/84final/9996/9996pro_150.html)。 – HABO

+0

感谢您的输入 - 所以,通过“倾销我”,我的意思是我返回到VMS提示,而不是回到菜单。目标是,在用户结束远程会话后,它们将返回到菜单。 –

+0

另外,如果他们选择未列出的选项,我该如何避免退出?例如,如果用户键入W,则只会退出程序并将用户返回到VMS提示。 –

  1. 不要与终端设置淤泥!
  2. INQUIRE不好,多数情况下,但现在足够好。
  3. 的大块文本常量的
  4. 表查询,或关联数组使用Type这么比长更清洁IF THEN别人的
  5. 使用F $ TYPE,看是否有符号是一个字符串或整数或没有-AT -ALL

检查了这一点的一些想法:

$ ! MRV Terminal Server Connection Menu 
$ ! 
$ CLS :== TYPE/PAGE NL: ! Please don't muck with my screen setting as in: SET TERMINAL/WIDTH=80 
$ WT :== WRITE SYS$OUTPUT 
$ ANS_1 = "aap.xxx.xxx.xxx" 
$ ANS_2 = "noot.xxx.xxx.xxx" 
$ ANS_14 = "mies.xxx.xxx.xxx" 
$ ! 
$ Menu: 
$ ! 
$ ! If SSH (or anything else) causes an error, go back to the menu. 
$ ! It is placed here because it needs to be set again after each error. 
$ on error then $ goto Menu 
$ ! 
$ type/page sys$input: 

    MRV Terminal Server Connection Men 

    1  MRV 1 
    2  MRV 2 
    : 
    14 MRV 14 

    X  EXIT" 
$ ! 
$ INQUIRE ANS "Select the MRV you wish to connect to:" 
$ ! 
$ if ANS .eqs. "X" then exit 
$ if f$type(ANS_'ANS') .eqs. "" 
$ then 
$ ! Handle any unexpected input. 
$ WT "Beg your pardon? ''ANS' ? " ! Immediately followed by clearing the screen. Sigh. 
$ WAIT 0:0:3 
$ ! 
$ ! We did what they wanted. How else may we serve? 
$ goto Menu 
$ endif 
$ command = "SSH """ + ANS_'ANS + """" 
$ write sys$output "Going to execute : " + command 
$ 
$! 'command  ! Remove Comment for real action 
+0

6.不要为本地使用创建全局符号。 7.使用错误处理代码来处理错误,而不是仅仅在没有检查的情况下使用它们。 – HABO

+0

HEIN - 经过测试和运行良好。我从HABO的例子中增加了两行代码。当我测试完毕后,退出与MRV的连接后,我返回到DCL提示符。我补充说:'出错了,然后转到菜单'和'转到菜单'在底部。 –

这可能是根据自己的喜好:

$ ! MRV Terminal Server Connection Menu 
$ !  
$ CLS :== SET TERMINAL/WIDTH=80 
$ WT :== WRITE SYS$OUTPUT 
$ ! 
$ Menu: 
$ ! 
$ ! If SSH (or anything else) causes an error, go back to the menu. 
$ ! It is placed here because it needs to be set again after each error. 
$ on error then $ goto Menu 
$ ! 
$ CLS 
$ WT " MRV Terminal Server Connection Menu " 
$ WT " " 
$ WT " 1  MRV 1" 
$ WT " 2  MRV 2" 
$ WT " 3  MRV 3" 
$ WT " 4  MRV 4" 
$ WT " 5  MRV 5" 
$ WT " 6  MRV 6" 
$ WT " 7  MRV 7" 
$ WT " 8  MRV 8" 
$ WT " 9  MRV 9" 
$ WT " 10  MRV 10" 
$ WT " 11  MRV 11" 
$ WT " 12  MRV 12" 
$ WT " 13  MRV 13" 
$ WT " 14  MRV 14" 
$ WT " " 
$ WT " " 
$ WT " " 
$ WT " " 
$ WT " "          
$ WT " X  EXIT" 
$ WT " " 
$ ! 
$ INQUIRE ANS "Select the MRV you wish to connect to:" 
$ ! 
$ if Ans .eqs. "X" 
$ then 
$ goto Houseclean 
$ else if Ans .eqs. "1" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "2" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "3" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "4" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "5" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "6" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "7" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "8" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "9" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "10" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "11" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "12" 
$ then 
$ SSH "[email protected]" 
$ else if Ans .eqs. "13" 
$ then 
$ SSH "[email protected]" 
$ else 
$ ! Handle any unexpected input. 
$ WT "Beg your pardon?" ! Immediately followed by clearing the screen. Sigh. 
$ endif 
$ ! 
$ ! We did what they wanted. How else may we serve? 
$ goto Menu 
$ !    
$ Houseclean: 
$ ! Nothing else to do. 
$ exit ! Or perhaps you prefer $ logout