使用tcl/expect实现ftp交互(含手工输入)

需求:

   登录到ftp服务器ftp.google.org (用户名:google 密码:google), 根据用户输入获取Rfc文档。


实现:

#!/usr/bin/env expect 

set timeout 15
set u_Prompt "Name"
set p_Prompt "Password:"
set f_Prompt "ftp>"
set sUser "google"
set sPwd "google"

log_file -a tmp.log

proc sLogin {} {

    global u_Prompt p_Prompt f_Prompt sUser sPwd

    send "spawning ftp\n"
    spawn ftp ftp.google.org
    expect {
        "$u_Prompt" {
            exp_send "$sUser\r"
            exp_continue
        }
        "$p_Prompt" {
            exp_send "$sPwd\r"
            exp_continue
        }
        -ex "$f_Prompt" {
            puts "Login Successfully!\n"
            return $spawn_id
        }
    }
}

proc gRfc {} {
    set spawn_id [sLogin]

    while 1 {
        send_user "Enter an RFC number:"
        expect_user {
            -re "(\[0-9]+)\n" break
            -re (.*)\n {
                send_error "$expect_out(1,string) is garbage!\n"
            }
            timeout {
                send_error "Sorry, I can't wait any longer!\n"
                exit 1
            }
        }
    }

    send_user "You asked for RFC $expect_out(1,string).\n"
    send_user "\nall done\n"
}

gRfc


注意:

1) 全局变量的使用

2)log_user实现脚本日志的保存

3) send_user 和expect_user实现人和脚本的交互

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值