1.安装expect

expect用于shell脚本中自动交互,其是基于tcl编程语言的工具。所以安装expect首先安装tcl。本文中使用的是expect5.45tcl8.6.6

安装tcl

  1. [root@tseg0 /]$ mkdir /tools
  2. [root@tseg0 /]$ tar -zxvf tcl8.6.6-src.tar.gz
  3. [root@tseg0 /]$ cd tcl8.6.6/unix/
  4. [root@tseg0 /]$ ./configure
  5. [root@tseg0 /]$ make
  6. [root@tseg0 /]$ make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

安装expect

  1. [root@tseg0 /]$ cd /tools
  2. [root@tseg0 /]$ tar -zxvf expect5.45.tar.gz
  3. [root@tseg0 /]$ cd expect5.45/
  4. [root@tseg0 /]$ ./configure --with-tcl=/usr/local/lib/ --with-tcl include=/tools/tcl8.6.6/generic/
  5. [root@tseg0 /]$ make
  6. [root@tseg0 /]$ make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

shell脚本实现scp传输

命令解释

-c 表示可以在命令行下执行except脚本; 
spawn 命令激活一个unix程序来交互,就是在之后要执行的命令; 
expect “aaa” 表示程序在等待这个aaa的字符串; 
send 向程序发送字符串,expect和send经常是成对出现的,比如当expect“aaa”的时候,send“bbb”。

执行脚本

  1. #! /bin/sh
  2. expect -c "
  3. spawn scp -r /home/tseg/hello $name@10.103.240.33:/home/$name/
  4. expect {
  5. \"*assword\" {set timeout 300; send \"$pass\r\"; exp_continue;}
  6. \"yes/no\" {send \"yes\r\";}
  7. }
  8. expect eof"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

解释: 
第二行: -c 表示可以不用与控制台交互; 
第三行:spawn激活一个scp的unix程序; 
第五行:expect期待含有“assword”的字符串,设置连接时间最大为300毫秒,如果出现这个字符串,就send 变量pass代表的密码字符串, exp_continue表示执行下面的匹配; 
第六航:expect期待含有“assword”的字符串,设置连接时间最大为300毫秒,如果出现这个字符串,就send 变量pass代表的密码字符串; 
第八行:表示结束。

####sample 1:

1.vi 1.sh

  1. #! /bin/sh
  2. export pass=123456
    export name=root
  3. expect -c "
  4. spawn scp -r /home/tseg/hello $name@10.103.240.33:/home/$name/
  5. expect {
  6. \"*assword\" {set timeout -1; send \"$pass\r\"; exp_continue;}
  7. \"yes/no\" {send \"yes\r\";}
  8. }
  9. expect eof"
  10.  
  11. set timeout -1   ------->>>>>>注意此处的-1,-1表示永不超时,也就是:等 scp 命令正常执行完成之后,控制权会转移到下一行。  

set timeout 300  ------->>>>>>300表示300秒后超时,在超时之后,控制权会转移到下一行;若在超时时间之内,程序运行完,则控制权也会转移到下一行。

  1.  
  2. 2. nohup sh 1.sh
  3.  
  4. 转自 http://blog.csdn.net/BlockheadLS/article/details/52980797
  5.  
  6. ####sampe 2
  7.  

转 在shell脚本中使用expect实现scp传输问题的更多相关文章

  1. linux shell脚本中使用expect(脚本打开新终端自动远程连接顺便输一点指令)(巨坑)

    放弃吧 我找了六个小时都没找到可以用的方案(指标题括号里的内容) 给个曲线救国的方法: 现把expect脚本写成一个文件 在另一个shell脚本中调用

  2. ftp在shell脚本中的使用方法

    1. ftp自动登录批量下载文件. #####从ftp服务器上的/home/data 到 本地的/home/databackup#####!/bin/bashftp -n<<!open 1 ...

  3. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  4. shell脚本中的反引号使用 `

    反引号是~的英文切换 在shell脚本中,反引号允许将shell命令的输出赋值给变量. test=`date` 这样shell会执行反引号中的命令.并将执行的结果赋值给变量tests.

  5. Shell脚本中执行mysql的几种方式(转)

    Shell脚本中执行mysql的几种方式(转) 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用 ...

  6. Shell脚本中执行sql语句操作mysql

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  7. Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载

    Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数 ...

  8. 【转】shell脚本中echo显示内容带颜色

    shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e.格式如下:   echo -e "\033[41;36m something here \033[0m&qu ...

  9. 在shell脚本中使用函数

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 对于在脚本中重复使用的功能模块,可以封装成为函数. shell脚本中函数的定义可以使用如下两种方式: a. ...

随机推荐

  1. Codeforces Round #383 (Div. 2) B. Arpa’s obvious problem and Mehrdad’s terrible solution —— 异或

    题目链接:http://codeforces.com/contest/742/problem/B B. Arpa's obvious problem and Mehrdad's terrible so ...

  2. fiddler_test

    fiddler学习第二天 啦啦啦 拉拉呀

  3. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

  4. BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数

    BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数 Description  dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭 ...

  5. BZOJ_2438_[中山市选2011]杀人游戏 _强连通分量

    BZOJ_2438_[中山市选2011]杀人游戏 _强连通分量 Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手.警察能够对每一个人 ...

  6. salt api

    #!/usr/bin/env python # -*- coding:utf8 -*- # __author__ = '北方姆Q' import requests import json from d ...

  7. py-day17-jquery

    jquery实现案例 案例: 1.点赞 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  8. 性能测试之Jmeter学习(四)

    本节主要讲解:如何创建Web测试计划 如何创建一个简单的测试计划,用于测试web站点? 1.明确测试需求:我们会模拟5个并发用户,对Jakarta Web站点的网个页面进行访问,另外每个并发用户都会运 ...

  9. Servlet中init-param与context-param的区别

    web.xml文件中Servlet中配置如下: <servlet> <servlet-name>loginServlet</servlet-name> <se ...

  10. 使用 Multipath TCP 为 iOS 创建备份连接(转)

    这篇文章的英文版如下: https://support.apple.com/en-us/HT201373 这里咱们采用苹果手机打开测试网站,发现没有检测到MPTCP,初步猜想可能需要打开什么设置,后续 ...