EXPECT介绍

一种TCL扩展性语言,使用一种自动的方式来模拟人手工互动的过程。

 

exepect命令:

1、spawn  启动一个进程,其后所有expect操作都在该进程中执行;

    spawn ssh root@10.137.86.123

    支持其他选项:

    -open 启动文件进程

    ignore 忽略某些信号

 

2、expect  表达式 动作 表达式 动作 。。。

    用于等候一个相匹配的输出,匹配上则执行后面的动作

    spawn ssh root@10.137.86.123

    expect "password:"  {exp_send "word\r"}

    也可以如下

     spawn ssh root@10.137.86.123

     expect "password:"

     exp_send 'word\r"

     可同时匹配多个关键字

     spawn ssh root@10.137.86.123

     expect {

        -re "password:"    {exp_send "word\r"}

        -re "TopsecOS#"  { }

     }

 

3、expect_user 匹配从用户那里的输入,代替了expect的匹配操作

    expect_user {

        -re hello    //从用户那获取输入,匹配是否为hello

        {puts stdout "HELLO"; exp_continue}   //exp_continue命令的存在,该程序会一直循环

        -re hi 

       {puts stdout "HI"; exp_continue} 

    }

 

4、exp_send  expect中的动作命令,同send相同

   可用参数:

   -i  指定spawn_id,可向不同spawn_id进程发送命令,多程序控制关键参数。

   -s  表示slowly,即发送速度控制,使用时要与send_slow相关联。

 

5、exp_continue  也属动作命令,从头开始遍历,即匹配第一个关键字后,第二次匹配仍然从第一个关键字开始

 

6、exp_internal   打开expect调试模式的命令

    接受值包括:非0(打开调试)、0(关闭调试)、-f file(将调试写入文件)

   exp_internal –f file 0   调试信息放入文件但不标准输出

   exp_internal –f file 1   调试信息放入文件且标准输出

spawn ftp 10.11.105.15

exp_internal 1

expect {

        -re "Name" {exp_send "ftp\r"; exp_continue}

        -re "Pass" {exp_send "ftp\r"; exp_continue}

        -re "ftp>" {exp_send "by\r"}

}

expect eof

 

7、exp_pid 获取当前spawn的进程号,支持-i选项,用来指定具体spawn进程

     set pid [exp_pid -i $spawn_id]

 

8、send_user 将后面的参数输出到标准输出去,默认的send、exp_send都将参数输出

     send_user "please input passwd: "

 

9、send_error  将后面参数输出到标准错误输出去,同8去向不同

 

10、 send_log 把后面内容输出到log文件,该命令与log_file命令配合使用,log_file指定了文件则send_log可向其写内容,若无log_file,则send_log无效

 

11、close  关闭连接,支持-i,若不带任何选项,则关闭当前$spawn_id指定的过程

 

12、wait  与close类似,关闭连接,但wait等待系统主动返回eof,即结束信号,方可关闭,同样支持-i

 

13、log_user  指定expect输出位置,默认值为1,即所有输出都放入标准输出中(重定向一可到文件中),若为0,即没有任何输出

 

14、log_file   将输出记录到文件中

      log_file <选项> filename,选项如下:

     -open      文件已打开,可往该文件继续添加内容,该情况仅用于windows;

     -leaveopen   文件已打开,不继续向该文件添加内容

     -noappend   文件已存在,清空文件内容,再写入

     -a               文件已存在,则新内容追加文件末尾

 

15、remove_nulls  去掉返回的控制符,即信号符号

     remove_nulls 0  关闭自动去掉控制符功能

     remove_nulls 1  开启自动去掉控制符功能

 

16、maxch_max 设置expect_out(buffer)变量缓存大小,默认是2000字符

      match_max 65535

      2个选项:

      match_max -d 1048576  默认值

      match_max -i  lo_spawnid  设置某spawn_id指定的进程缓存

 

17、trap  监听系统信号

       3种信号方式:

     c的SIGINT、SIGHUP等;

     简略的-INT、-SIGHUP;

     linux的kill模式,9、15;

 

      trap {

         send_user "bye bye\r"

         exit

      } SIGINT     //监听到SIGINT信号,就打印bye bye并退出,SIGINT一般都是ctrl+c

 

     trap {

       send_user "signal name is [trap -name]"    //-name选项,返回监听信号名称

       send_user "signal integer is [trap -number]"  //-number选项,返回监听信号数值

       exit

    } {SIGINT SIGHUP SIGQUIT}     //一次性监听多个信号,则把信号一次性赋给trap命令

 

    trap SIG_IGN { SIGINT SIGHUP SIGQUIT}     //脚本的前部分取消这些信号,脚本运行期间用户若输入该些信号则被忽略

    ..............

    trap SIG_DFL { SIGINT SIGHUP SIGQUIT}     //脚本后部分恢复改些信号

 

 18、exit 退出脚本,也可做一些扫尾

      exit -onexit {

          exec rm $tmpfile

          send_user "Good bye\n"

      }

 

19、interact 在脚本中将控制权交给用户,由用户与spawn生成的进程进行交互

spawn ftp see@10.137.86.123
expect "Password:"
exp_send "see\r"

interact {                        //将控制权交给用户
  "d" {puts [exec date]}    //用户若输入d,则打印日期
  "q" {exit}                      //用户若输入q,在退出ftp连接
}

send "\r"                               //重要,因后面expect命令需要匹配ftp>字符,但interact将控制权交给脚本时,expect的buffer为空,必须用send将提示符推到buffer中

expect { ftp> {send "bye\r"}
}

expect { default {}
}

 

   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值