expect实现脚本的 自动交互

Posted wuning

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了expect实现脚本的 自动交互相关的知识,希望对你有一定的参考价值。

1.需求

最近需要使用scp自动将本地服务器的文件拷贝到远程服务器上;

2.安装expect

#安装expect前,需要安装tcl环境
yum -y install tcl
yum -y install expect

3.expect脚本

#!/usr/bin/expect

set passwd "xxxx"
set ip "192.168.x.xxx"
set username "scpuser"

#不论是在此脚本内自动输入密码还是在脚本外手工输入密码,至少要等待5秒
set timeout 5

spawn scp -P 62471 /opt/module/jobs/xx.txt $username@$ip:/home/scpuser

#当检测到 password 时,会自动发送 $passwd 并回车
expect {
   "password"
        {
          send "$passwd
"
        }
   "yes/no"
        {
          sleep 5
          send "yes
"
        }
}

# 退出spawn开启的进程
send "exit
"

# 退出此expect交互程序
expect eof

问题:不能通过 sh 脚本的方式运行expect脚本

4.shell脚本使用expect工具

#!/bin/bash

passwd="xxxx"
username="scpuser"
ip="192.168.x.xxx"

# 指定执行引擎
/usr/bin/expect <<EOF

    #不论是在此脚本内自动输入密码还是在脚本外手工输入密码,至少要等待5秒
    set timeout 5

    spawn scp -P 62471 /opt/module/jobs/xxx.txt $username@$ip:/home/scpuser
        
        #当检测到 password 时,会自动发送 $passwd 并回车
    expect {
       "password"
            {
              send "$passwd
"
            }
       "yes/no"
            {
              sleep 5
              send "yes
"
            }
    }

    # 退出spawn开启的进程
    send "exit
"

    # 退出此expect交互程序
    expect eof
EOF

5.注意expect eof 和 interact 的区别

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

以上是关于expect实现脚本的 自动交互的主要内容,如果未能解决你的问题,请参考以下文章

expect工具实现脚本的自动交互

expect实现脚本的 自动交互

利用spawn和expect自动交互并返回交互结果

linux通过expect实现脚本自动交互

shell脚本之通过发送带 字符串或expect脚本实现交互输入自动化

自动化运维脚本语言之expect实践学习