码迷,mamicode.com
首页 > 其他好文 > 详细

expect实现脚本的 自动交互

时间:2019-11-22 00:41:55      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:环境   rac   shell脚本   bin   程序   expect   服务器   通过   scp   

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\n"
        }
   "yes/no"
        {
          sleep 5
          send "yes\n"
        }
}

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

# 退出此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\n"
            }
       "yes/no"
            {
              sleep 5
              send "yes\n"
            }
    }

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

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

5.注意expect eof 和 interact 的区别

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

expect实现脚本的 自动交互

标签:环境   rac   shell脚本   bin   程序   expect   服务器   通过   scp   

原文地址:https://www.cnblogs.com/wuning/p/11909084.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!