アプリ版:「スタンプのみでお礼する」機能のリリースについて

expectの使い方についてご教示頂きたいことがあります。
内容は以下の通りです。

1)スイッチ機器にtelnetし、自動的に設定を行うようにしたい。
この機器の通常のプロンプトは"goo#"とする
"goo"はあらかじめ変数"host"として代入される。
telnet後、この装置のプロンプトが本当に goo#だったら"save"コマンドを実行する。

expect "${host}#"
send "save\n"

ここまではわかるのですが、ではgoo# 以外のプロンプトだったら即座に処理を中断
(別の処理)したいのです。


2)ログイン中に別ファイルを呼び出し、その中から1行ずつ抜き出して改行コードつきでコマンドを実行したい場合どうすればいいのか


http://www.linux.or.jp/JM/html/expect/man1/expec …

このページは読んだのですが、いまいちよく理解できません。
よろしくお願いいたします。

A 回答 (1件)

どもです。


参考にしてみてください。

#!/usr/local/bin/expect

set host "192.168.1.10"
set prompt "prompt"
set passwd "passwd"

set timeout -1
log_file expect.log
if [catch {open "./cmd.txt" r} fd] {
 puts "Can't open cmd.txt...\n"
 exit
}

spawn telnet $host
expect {
 "Connection timed out" {puts "\n\nTime out....\n"; exit}
 "password:"
}
send "$passwd\r"
expect {
 "Permission denied" {puts "\n\nPassword Invalid...\n"; exit}
 $prompt
}
while {[gets $fd line] >= 0} {
 send "$line\r"
 expect $prompt
}
send "exit\r"
expect eof
close $fd
    • good
    • 0
この回答へのお礼

ありがとうございました、一発で解決しました。
また、別件ですがcoredumpさまが過去に回答された

>質問:shスクリプトでftp接続してファイル転送したい

もとても参考になりました。
精進いたします。

お礼日時:2005/07/18 22:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!