• 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匹配

  • 相关阅读:
    洛谷P3165 [CQOI2014]排序机械臂
    splay详解(一)
    存储过程解题
    使用zxing生成二维码
    Cognos 图表用图片取代”没有数据显示”
    哪些响应式布局框架是设计师使用的?
    A shallow summary of oracle log miner
    雅虎UED--无障碍网页设计
    smarty 截取字符串,调用php中的方法,foreach循环
    一个页面重构工程师眼中的“用户体验”
  • 原文地址:https://www.cnblogs.com/wuning/p/11909084.html
Copyright © 2020-2023  润新知