2017-04-13 10 views
0

まず、newbです。キーボードの周りには使用できません。つまり、ユーザがリストから選択することでリモートデバイスに接続できるようにする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 then goto GoMenu'が役立ちます。 [参照](http://h41379.www4.hpe.com/doc/84final/9996/9996pro_150.html)。 – HABO

+0

入力していただきありがとうございます。「ダンプする」とは、VMSプロンプトに戻ってメニューに戻ることを意味します。目標は、ユーザーがリモートセッションを終了した後、メニューに戻ることです。 –

+0

また、リストに表示されていない選択肢を選択すると、それを終了しないようにするにはどうすればよいですか?たとえば、ユーザーがWと入力すると、プログラムが終了してユーザーがVMSプロンプトに戻ります。 –

答えて

2
  1. は、端末の設定でマックしないでください!
  2. INQUIREは悪いですが、それほど頻繁ではありませんが、今は十分です。よそ
  3. 使用F $のTYPE THEN IF定数テキスト
  4. テーブルルックアップ、または連想配列の大きな塊のための
  5. 使用TYPEは、シンボルが文字列または整数もしくはNOTHING-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の例から2行追加しました。テストしたところ、MRVへの接続を終了した後、私はDCLプロンプトに戻りました。私は次のように付け加えました。「間違っていたら、MENUに行く」と「下に行く」メニュー。 –

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