expect
是一个用于自动化交互式应用程序的工具,特别适用于需要输入用户名和密码的场合
- 基本语法:
expect script
其中,script
是一个包含预期输出的脚本文件。
- 等待特定输出:
使用
expect_out(buffer)
变量可以捕获命令的输出。例如,等待 “password:” 提示:
expect "password:"
- 发送命令:
使用
send
命令向交互式应用程序发送输入。例如,发送 “my_password”:
send "my_password\r"
\r
是回车符,用于模拟用户按下 Enter 键。
- 等待模式:
expect
命令支持几种等待模式,如spawn
,expect
,send
,interact
等。例如,使用spawn
启动一个新的交互式进程:
spawn ssh user@example.com
- 条件判断:
可以使用
if
语句和正则表达式进行条件判断。例如,检查是否收到特定的输出:
if { $expect_out(buffer) =~ "password:" } { send "my_password\r" }
- 超时设置:
可以使用
expect_out(timeout)
变量设置超时时间。例如,等待 10 秒:
expect { "password:" { send "my_password\r" } timeout { puts "Timeout occurred" exit 1 } }
- 循环:
使用
while
循环可以重复执行某个命令。例如,不断发送 “ping” 命令,直到遇到特定的输出:
set count 0 while {$count < 5} { expect "password:" { send "my_password\r" set count [expr $count + 1] } sleep 1 }
- 变量和操作符:
expect
支持多种变量和操作符,如字符串比较、正则表达式等。例如,检查输出是否包含 “error”:
if { $expect_out(buffer) contains "error" } { puts "Error found" }
这些是 expect
命令的一些常见用法。expect
的功能非常强大,可以实现许多复杂的自动化任务。