前置条件:
我们在使用shell脚本执行一些交互时,如何免去手动交互呢?
引入示例expect:
expect的核心是spawn expect send set;
spawn 调用要执行的命令;
spawn ssh root@$i "touch /root/.ssh/authorized_keys"
expect 等待命令提示信息的出现,也就是捕捉用户输入的提示:expect "root@${s_ip}'s password:"
send 发送需要交互的值,替代了用户手动输入内容:
send "$password\r"
set 设置变量值
set s_ip 192.168.1.113
interact 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上
expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if…endif
expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了
设置expect永不超时 set timeout -1
设置expect 300秒超时,如果超过300没有expect内容出现,则退出 set timeout 300
set timeout 300 #设置执行超时时间
expect "root@${s_