2017-04-13 64 views
0

首先,我是一個全新的,不應該被允許在鍵盤周圍。也就是說,我正在嘗試編寫一個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提示。 –

回答

2
  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提示符。我補充說:'出錯了,然後轉到菜單'和'轉到菜單'在底部。 –

0

這可能是根據自己的喜好:

$ ! 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