shell脚本需要交互的地方可以使用here文档是实现,但是有些命令却需要用户手动去就交互如passwd、scp

对自动部署免去用户交互很痛苦,expect能很好的解决这类问题。

expect的核心是spawn expect send set

spawn 调用要执行的命令
expect 等待命令提示信息的出现,也就是捕捉用户输入的提示:
send 发送需要交互的值,替代了用户手动输入内容
set 设置变量值
interact  执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。
expect eof  这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if....endif

expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了。

设置expect永不超时
set timeout -1

设置expect 300秒超时,如果超过300没有expect内容出现,则推出
set timeout 300

expect编写语法,expect使用的是tcl语法。

一条Tcl命令由空格分割的单词组成. 其中, 第一个单词是命令名称, 其余的是命令参数
cmd arg arg arg

$符号代表变量的值. 在本例中, 变量名称是foo.
$foo

方括号执行了一个嵌套命令. 例如, 如果你想传递一个命令的结果作为另外一个命令的参数, 那么你使用这个符号
[cmd arg]

双引号把词组标记为命令的一个参数. "$"符号和方括号在双引号内仍被解释
"some stuff"

大括号也把词组标记为命令的一个参数. 但是, 其他符号在大括号内不被解释
{some stuff}

反斜线符号是用来引用特殊符号. 例如:\n 代表换行. 反斜线符号也被用来关闭"$"符号, 引号,方括号和大括号的特殊含义

expect使用实例

1。首先确认expect的包要安置。

#rpm -qa | grep expect

如果没有则需要下载安装,

#yum install expect

2.安装完成后,查看expect的路径,可以用

#which expect

/usr/bin/expect

3.编辑脚本
#vi autosu.sh
添加如下内容

#!/usr/bin/expect  -f   //这个expect的路径就是用which expect 查看的结果spawn su - nginx       //切换用户expect "password:"      //提示让输入密码send "test\r"       //输入nginx的密码interact                //操作完成

4.确定脚本有可执行权限

chmod +x autosu.sh

5.执行脚本 expect autosu.sh 或 ./autosu.sh

expect常用脚本

登陆到远程服务器

#!/usr/bin/expect   set timeout 5 set server [lindex $argv 0] set user [lindex $argv 1] set passwd [lindex $argv 2] spawn ssh -l $user $server
expect { "(yes/no)" { send "yes\r"; exp_continue } "password:" { send "$passwd\r" } } expect "*Last login*" interact

scp拷贝文件

#!/usr/bin/expectset timeout 10set host [lindex $argv 0]        //第1个参数,其它2,3,4参数类似set username [lindex $argv 1]set password [lindex $argv 2]set src_file [lindex $argv 3]set dest_file [lindex $argv 4]spawn scp $src_file $username@$host:$dest_fileexpect {"(yes/no)?"{send "yes\n"expect "*assword:" { send "$password\n"}}"*assword:"{send "$password\n"}}expect "100%"expect eof

使用方法
./expect_scp 192.168.75.130 root 123456 /root/src_file /root/dest_file
以上的命令执行后,将把本地/root目录下的src_file文件拷贝到用户名为root,密码为123456的主机192.168.75.130中的/root下,同时还将这个源文件重命名为dest_file

本文转自 拾瓦兴阁 51CTO博客,原文链接:http://blog.51cto.com/ponyjia/1641019

使用expect实现shell自动交互相关推荐

  1. expect返回值给shell_使用expect实现shell自动交互

    shell脚本需要交互的地方可以使用here文档是实现,但是有些命令却需要用户手动去就交互如passwd.scp 对自动部署免去用户交互很痛苦,expect能很好的解决这类问题. expect的核心是 ...

  2. shell自动交互之expect脚本_转

    转自:linux expect详解(ssh自动登录) shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh root@192.168.22.194e ...

  3. 教会你Linux Shell自动交互的三种方法

    你了解Linux系统么?你是Linux系统的应用者么?如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享 ...

  4. linux自动点击软件上的按钮有什么用,教会你Linux Shell自动交互的三种方法

    你了解Linux系统么?你是Linux系统的应用者么?如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享 ...

  5. linux 自动化交互套件 expect 介绍 shell非交互

    expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信. expect自动交互流程: spawn启动指定进程---expect获取指定关键字--- ...

  6. Linux基于expect(tcl)实现shell自动交互

    1.需求:在shell中执行scp命令时,可以自动输入密码,而不用手工交互输入. 2.方案:采用expect来实现.       Expect是一个基于TCL开发出的语言包.       而TCL(T ...

  7. [转]expect实现ssh自动交互

    shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh root@192.168.22.194 expect "*password:&quo ...

  8. Linux下shell自动输入密码,shell脚本通过expect脚本实现自动输入密码

    背景:在远程文件下载时,需要输入对方的服务器密码,shell不支持交互输入内容,可以用下面两种方式实现 一.在shell脚本中嵌入expect来实现密码输入 expect是一个自动交互功能的工具.ex ...

  9. linux shell 三种自动交互 方法

    方法一 自动交互最关键的就是交互信息的自动输入,首先联想到文件重定向,在shell编程中有这样一种用法(参考LINUX与UNIX SHELL编程指南 chapt 5.7):"command ...

最新文章

  1. spring amqp rabbitmq fanout配置
  2. ckfinder php 配置,php – 在Laravel 5中为CKEditor设置路径以使用CKFinder
  3. “睡服”面试官系列第七篇之map数据结构(建议收藏学习)
  4. 【nyoj 47】 过河问题(思维)
  5. mac用什么写python程序_mac下,有哪些python开发工具可用
  6. Windows Phone 7 立体旋转动画的实现
  7. 利用 vimdiff 递归对比文件夹差异
  8. 服务器硬盘容量为0,硬盘容量不一样 raid0 扩容也可以很自如?
  9. oracle报1653解决办法,oracle 建立查询账号ORA 1653和ORA 01502错误处理方法
  10. 分片(primary shard replica shard)
  11. 各个国家的市场分析(俄罗斯,白俄罗斯)
  12. 卢卡斯Lucas定理
  13. 三角函数对应在平面坐标上画圆
  14. SpringBoot 就这一篇全搞定
  15. android studio 微信登录界面,如何使用Android Studio开发用户登录界面
  16. 第三人称计算机获奖感言,个人获奖感言50字第三人称
  17. Android 报错Android - Performing stop of activity that is not resumed
  18. aws mysql 费用_AWS都收了哪些费用?
  19. mysql 5.0.8 下载_mysql-connector-
  20. uniapp m3u8格式视频加载

热门文章

  1. 《自然》:修复AI神经网络的缺陷
  2. 人类为什么更聪明 | 人脑神经元关键结构差异被揭示
  3. 靠云计算翻身的微软正在“挑衅”亚马逊AWS
  4. 『报告』IDC:2018年物联网产业10大预测
  5. 清华大学:刘洋——基于深度学习的机器翻译
  6. 64 岁的 Python 之父:我不退休了,我要去微软!
  7. 小米十年,雷军的一往无前
  8. VirtualBox虚拟机开机后台自启动
  9. C# tips ---值类型的装箱和拆箱
  10. 浅谈微服务的来龙去脉