• 締切済み

teratermマクロ 文字列分岐

お世話になっております。 下記の件ご教授願えませんでしょうか? teratermを使いサーバに文字列を送り、返ってきた 文字列によって処理を行いたく、下記のようにマクロ を作成したのですが、どうやら、5行目にエラーが発生 してしまい中断という形になってしまいます。 --------------------------------- Prompt1 = '?' sendln 'y' setsync 1 recvln if inputstr = Prompt1 then sendln 'y' else end if setsync 0 --------------------------------- やりたいことは文字列'y'を送信し、 プロンプトで'?'以外の文字列が出力されるまで、 'y'を送信し続ける。 という内容です。 お手数ですがご教授願います。 ちなみにですが、teratermのバージョンは4.57です。

noname#89227
noname#89227

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

TeraTermマクロの式は整数型しかサポートしてないので=による文字列判定はできないかと。 recvlnは改行を待つから、「?」しか送られてこないとタイムアウトがにより予期せぬ処理フローが発生するかも。 waitで待ち受ける記述のほうが良いのでは。

  • kent85
  • ベストアンサー率52% (38/73)
回答No.1

マクロじゃないしに、yes プログラムを使えばいいかと思います。 $ which yes /usr/bin/yes $ yes y | rm -i *.txt $ yes y | rm -i /tmp/*.jpg ( rm -i はインタラクティブに y/n ) # yes y | rm -i *.html

参考URL:
http://www.linux.or.jp/JM/html/gnumaniak/man1/yes.1.html

関連するQ&A

  • Teratermで、条件分岐させたい

    Teratermでサーバに自動ログインし作業するためのマクロを作成中です。 条件分岐が発生するコマンド実行後、ユーザが入力した内容で実行したいと思っています。 例えば、 1.sendln 'yum update パッケージ' を実行。 2..Is this ok [y/N]: と表示されたことを確認後、ユーザーにy か N を問い合わせる。 3.ユーザが入力した内容を元に、sendln でyかNを実行し、アップデートを実行。 teratermマクロでこのようなことは出来ますでしょうか? ご教授お願いします。

  • 【Teraterm macro】文字列の出力をトリガーにマクロを終了させる

    ど素人な質問ですみません。 teratermにて、ある文字列の出力をきっかけにマクロを終了させるような スクリプトを考えています。 フローとして、 (1):マクロ開始 (2):logファイル生成 (3):ルータの"show xx"にて出力表示 (4):logファイルオープン (5):filestrseekにて"0 input errors"を検索 (6)-1:もし文字列があればマクロ終了 (6)-2:もし文字列がなければ(3)から繰り返し 上記のフローでやりたいと思っています。 考えたマクロが↓です。 logopen 'c:\test.log' 0 0 :not_found sendln 'show interface loop 0' pause 1 fileopen fhandle 'test.log' 0 filestrseek fhandle '0 input errors' if result=0 goto not_found if else result=1 goto found filereadln fhandle str :found sendln 'finish script' fileclose fhandle いろいろ試したのですが、どうやらそもそも'0 input errors'探せてないようです。ログの中には確かに文字列は含まれているのですが。。 本来であればもっと調べるべきですが時間がなく申し訳ありません。 もしわかる方がいらっしゃいましたらご教授ください。 よろしくお願いいたします。

  • teratermマクロを使ったログイン

    teratermの初心者です。 今、teratermのマクロで”telnetを使ってwindowsマシンにログインする” という基本的な所を作ろうとしているのですが、 teratermインストールディレクトリ内の「login.ttl」を参考に記述し、 コマンドプロンプトから起動をかけると"connect 'ホスト名'"の行で 必ず止まってしまいます。 下記の記述で何処を修正すべきか、ご指摘頂けますと幸いです。 ===================================== testlink if result=0 connect'host' connect 'ホスト名' UsernamePrompt = 'login:' Username = 'ユーザー名\ドメイン' PasswordPrompt = 'Password:' Password = 'パスワード' wait UsernamePrompt sendln Username wait PasswordPrompt sendln Password ===================================== どうぞ宜しくお願い致します。

  • teratermで、ファイル名をinputstrに代入する

    teratermを使って、ftpでputさせたいと思います。 OSは、Linuxベースです。 コマンドラインに於いて $ ls ho* hoge1.txt hoge2.txt   ← この1行を、inputstrに代入させたい 自分で作ってみたのは、こんな感じ timeout = 5 sendln 'ls ho*' result = 0 wait 'ho' if result=1 recvln statusbox result 'result ' pause 1 ; ダイアログボックスを閉じる closesbox messagebox inputstr 'inputstr ' これを実行させると、「$ ls ho*」がinputstr に入っている。何故か? waitによって期待していた文字列(hoge1.txt hoge2.txt)を、inputstr に入れたいと思います。 どうしたらいいでしょうか。

  • 【Teratermマクロ】文字列の一致比較について

    If文を用いて、文字列同士が同じかを確かめたいのですが If文では数字のみしか比較できないらしいということがわかりました。 Teratermの場合、他の方法などで文字列の一致を確認できないのでしょうか? ご存知の方がいらっしゃいましたら、是非教えて下さい。

  • TeraTermマクロで入力した文字を表示し接続

    TeraTermマクロで下記の構文で、インプットされた文字を メッセージ内に表示するにはどのような表記をすれば良いのでしょうか? inputbox '接続先ホストを入力してください''input please' INPUT = inputstr strlen INPUT if result = 0 then messagebox '入力が空白になっています。終了します。' 'Input error' end endif messagebox  ↑上記で 入力した文字+○○○に接続いたします。と表示をしたい。 connect COMMAND ようするに、入力したホスト名メッセージを表示したいのですが どのような構文表記すれば良いか教えて下さい。

  • ttlで戻り値を取得する方法

    Teratermmacroでローカル(cygwin)に入り、サーバ(HP-UX)にリモートで入った後、 コマンドの戻り値で後の行動を操作したいのですが、うまくいきません。 わかる方、教えていただけませんか。 ざっくり以下のようなマクロを組んでいます。 ---------------------------------------------------------- sendln 'ssh name@host1' wait Prompt sendln 'sendmsg "test"'(のようなコマンド) ←これの戻り値がほしい if 戻り値 = 0 then  ○○ elseif 戻り値 = 1 then  wait Prompt  sendln 'exit'  wait Prompt  sendln 'ssh name2@host2' 以下略 ---------------------------------------------------------- 上記の「戻り値」をどのようにすれば戻り値で判別してくれるでしょうか。 if文の条件式を $?やresultでやりましたが、どのような戻り値でも 必ず$?は0、resultは1で固定でした。 また、sendmsgとif文の間に以下のように試しましたが、失敗しました。 例1: ---------------------------------------------------------- sendln 'echo $?' recvln if inputstr = 0 then ←syntax errorになります。  ○○ elseif inputstr = 1 then ---------------------------------------------------------- 例2:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1247390747参照 ---------------------------------------------------------- sendln 'echo $?' recvln recvln hensu=inputstr ←Type mismatch.のエラーになる。 直前にstr2intを入れたりしても駄目でした。 ちなみにsendln 'echo $?'を挟まずsendmsgの直後にrecvlnでも駄目です。 if hensu = 0 then  ○○ elseif hensu = 1 then ---------------------------------------------------------- host1にシェルスクリプトを入れることは出来ません。

  • teraterm文字列の選択

    お世話になっております。 現在、teratermのマクロを用いてサーバログの監視を行おうとしているのですが。 ログを閲覧するコマンドを送信して、ログがドバーっと出てくるのですが、 特定の行の、特定の文字列を指定するという事はteraterm上で可能なのでしょうか? また、その指定した文字列を用いて比較や条件分岐はできるのでしょうか? 現状、ドバーっと出てきたログをテキストファイルに吐き出して、 MSDOSのマクロで特定の文字列を抽出して云々という運用をしております。 teratermのみで実現できれば運用もしやすく、第三者にも分かりやすいので、 できればそうしたいと考えております。 ご教示のほど、よろしくお願い致します。

  • TeraTermマクロの文字列結合

    hostname = "100.100.100.100" log="20101010" という変数をteratermマクロで設定しております。 この二つの変数の間に、空白または_(アンダーバー)を一つ入れて "100.100.100.100_20101010" という文字列を作成して、変数に格納するなりしたいのです。 ただ、hostname変数とlog変数の中身は変えれないので、 hostname = "100.100.100.100_"や、log="_20101010"の このやり方以外でお願いします。 ご教授よろしくお願いします。

  • 【Teraterm】文字列と変数の連結方法

    Teratermのマクロで変数+文字列の結合はstrconcatを用いれば 可能ですが、文字列+変数の順で結合する場合、どうすればよいのでしょうか? ご存じの方、是非ご教授の程、宜しくお願いします。