在 expect
脚本中处理提示和响应
在这一步中,你将学习如何在 expect
脚本中处理不同类型的提示和响应。
让我们创建一个新的 expect
脚本来演示如何处理各种提示和响应:
#!/usr/bin/expect -f
set timeout 10
set host "example.com"
set user "myuser"
set password "mypassword"
spawn ssh $user@$host
expect {
"password:" {
send "$password\r"
expect "$"
}
"yes/no" {
send "yes\r"
expect "$"
}
"$" {
send "echo 'SSH login successful!'\r"
expect "$"
}
timeout {
puts "SSH login timed out"
exit 1
}
}
send "exit\r"
expect eof
在这个脚本中,我们使用 expect
命令和一组 expect
语句块来处理不同类型的提示:
- 如果脚本遇到 "password:" 提示,它会发送密码并等待 shell 提示符。
- 如果脚本遇到 "yes/no" 提示,它会发送 "yes" 并等待 shell 提示符。
- 如果脚本遇到 shell 提示符 (
$
),它会执行 echo
命令以验证 SSH 登录。
- 如果脚本遇到超时,它会打印一条消息并以错误代码退出。
最后,脚本发送 exit
命令以关闭 SSH 会话,并等待脚本结束 (expect eof
)。
将此脚本保存为 handle_prompts.exp
,并放置在 ~/project
目录中。
现在,让我们使脚本可执行并运行它:
chmod +x ~/project/handle_prompts.exp
~/project/handle_prompts.exp
你应该会看到以下输出:
SSH login successful!
这展示了如何使用 expect
命令在脚本中处理不同类型的提示和响应,从而使脚本更加健壮和适应性强。