【shell】那些年学过的expect

218 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

expect命令行参数

  • [lindex $argv n]获得indexn的参数(index从0开始计算)

  • $argc为命令行参数的个数

  • [lrange $argv 0 0]表示第一个参数

  • [lrange $argv 0 3]表示第1到第3个参数

  • if...elif...else...

expect支持 if 语句

if {条件1} {

     条件1执行语句

} elif {条件2} {

     条件2执行语句

} else {

     其他情况执行语句
}

说明

  • if 的条件用{}来包含条件

  • if 和后面的{}必须有空格隔开

  • 两个花括号之间必须有空格隔开,比如if {} {},否则会报错 expect:extra characters after close-brace

  • 使用{来衔接下一行,所以if的条件后需要加左花括号{

  • else不能单独放一行,所以else要跟在}后面

  • expect的核心是spawn expect send set

  • spawn:调用要执行的命令

  • expect:等待命令提示信息的出现,也就是捕捉用户输入的提示:

  • send:发送需要交互的值,替代了用户手动输入内容

set 设置变量值

  • interact:执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。

  • expect eof:这个一定要加,与 spawn 对应表示捕获终端输出信息终止,类似于 if....endif

  • expect: 脚本必须以 interactexpect eof 结束,执行自动化任务通常 expect eof 就够了。

设置 timeout

  1. 设置 expect 永不超时

    set timeout -1

  2. 设置 expect 300 秒超时,如果超过 300 没有 expect 内容出现,则推出

    set timeout 300