expect 是liunx上建立在工具控制语言(Tool Control Language,TCL)之上的一个工具,它允许你通过编写程序来对一些日常繁琐的任务进行有交互界面的自动化操作, 专门用来解决shell脚本中不可交互的问题。
例子:
此处为一个rsync命令下文件传输命令的自动化交互。接受调用时传入的参数,完成根据参数(文件路径)的自动化传输。
#!/usr/bin/expect
# expect脚本循环接受传入的数组
foreach d $argv {
# send $d
spawn rsync -azutp $d/ root@127.0.0.1:$d
expect {
"(yes/no)?" {
send "yes\n"
expect "*assword:" { send "222\n"}
}
"*assword:" {
send "22\n"
}
}
expect eof
}
基础设置和语法
1、安装expect
liunx下直接运行yum install expect即可安装
2、配置
进行声明
直接执行脚本声明 :#!/usr/bin/expect
嵌入执行脚本声明:#!/bin/bash
3、基础命令
基础命令
send:向进程发送字符串,用于模拟用户的输入
expect:判断上次输出的结果是否包含指定的字符串,如果由立即返 回,否则就等待超时时间后返回
spawn:启动进程,并跟踪后续交互信息
interact:执行完成后保持交互状态,把控制权交给控制台
EOF:结束交互状态
timeout :指定超时时间,默认10s timeout -1为永不超时
exp_continue 容许expect继续向下执行命令
send_user 回显命令,相当于echo
$argv参数数组 :expect脚本可以接受从bash传递的参数,可用使用 lindex $argv n 获得,n从0开始,表示第一个参数。
网友评论