linux expect工具使用

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

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

expect编写语法,expect使用的是tcl语法。
  cmd arg arg arg 一条Tcl命令由空格分割的单词组成. 其中, 第一个单词是命令名称, 其余的是命令参数
  $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/expect
set timeout 10
set 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 [email protected]$host:$dest_file
expect {
"(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

时间: 2024-09-29 23:13:27

linux expect工具使用的相关文章

Linux expect工具简单示例

expect安装命令 yum -y install expect 脚本代码如下: #!/usr/bin/expect set timeout 30 spawn ssh -l username 192.168.1.1 expect "password:" send -- "ispass\r"  //--可加也可不加 interact 脚本文件执行需要使用shell命令 :expect  filename 来执行 命令详细解释 1. #!/usr/bin/expect

Linux - 通过expect工具实现脚本的自动交互

目录 1 安装expect工具 2 expect的常用命令 3 作用原理简介 3.1 示例脚本 3.2 脚本功能解读 4 其他脚本使用示例 4.1 直接通过expect执行多条命令 4.2 通过shell调用expect执行多条命令 5 spawn not found 的解决 1 安装expect工具 expect是建立在tcl基础上的一个自动化交互套件, 在一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信. 其交互流程是: spawn启动指定进程 -> expect获取指定关键字

linux expect的简单用法及举例

一.expect简介 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能.而Expect就使用来实现这种功能的工具. Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预.Expect的作者Don Libes在1990年 开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件 (Expect [

【CentOS】部署开源企业级Linux备份工具—BackupPC

BackupPC安装所需的主要的安装包下载地址:http://pan.baidu.com/s/1bnCGCY7 (BackupPC的版本为3.2.1) (该版本的BackupPC是支持中文的,BackupPC配置好后,可以在其Web页面设置其显示语言即可) 1.添加backuppc组及用户 groupadd   backuppc useradd   -g   backuppc   backuppc 2.安装httpd.mod_perl及BackupPC yum   install   httpd

64位的ubuntu14.04 LTS安装 Linux交叉编译工具链及32位“ia32-libs”依赖库

ubuntu又迎来了其新一代的长期支持版本 14.04 LTS,其带来了许多令人期待的新特新,遂决定进行升级. 装好了64位版本及安装 Linux交叉编译工具链 运行GCC,${CROSS_COMPILE}gcc -v 依然会提示那经典的“没有那个文件或目录”提示. 根据以往的经验,对于64位版本ubuntu我们需要安装“ia32-libs”依赖库. 遂输入: sudo apt-get install ia32-lib 却提示查无此货? ubuntu 14.04强制安装ia32-libs 参考u

Linux 性能测试工具Lmbench详解

Linux 性能测试工具Lmbench详解 2010-06-04 16:07 佚名 评测中心 字号:T | T Lmbench 是一套简易可移植的,符合ANSI/C 标准为UNIX/POSIX 而制定的微型测评工具.一般来说,它衡量两个关键特征:反应时间和带宽.Lmbench 旨在使系统开发者深入了解关键操作的基础成本. AD:2014WOT全球软件技术峰会北京站 课程视频发布 Linux 性能测试工具Lmbench 是一套简易可移植的,符合ANSI/C 标准为UNIX/POSIX 而制定的微型

Linux远程终端工具Xmanager

Xmanager介绍 Xmanager全称Netsarang Xmanager,是国外一套非常优秀的远程监控软件.在UNIX/Linux和Windows网络环境中,Xmanager是最好的连通解决方案.我推荐大家下载Enterprise版本,企业版带的工具更多功能更强大.我们通过Xmanager连接Linux远程桌面进行图形化管理其实就是利用了Xmanager套装里面的Xbrowser程序. 由于想到平时用的是CentOS,而不是redhat.因此,这里我会拿CentOS6.4和RedHat 5

Linux命令工具基础04 磁盘管理

Linux命令工具基础04 磁盘管理 日程磁盘管理中,我们最常用的有查看当前磁盘使用情况,查看当前目录所占大小,以及打包压缩与解压缩: 查看磁盘空间 查看磁盘空间利用大小 df -h -h: human缩写,以人类易读方式显示结果(既带单位:比如M/G,如果不加这个参数,显示的数字以B为单位) $df -h /opt/app/todeav/config#df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-

Linux命令工具基础02 文件及目录管理

文件及目录管理 文件管理不外乎文件或目录的创建.删除.查询.移动,有mkdir/rm/mv 文件查询是重点,用find来进行查询:find的参数丰富,也非常强大: 查看文件内容是个大的话题,文本的处理有太多的工具供我们使用,在本章中只是点到即止,后面会有专门的一章来介绍文本的处理工具: 有时候,需要给文件创建一个别名,我们需要用到ln,使用这个别名和使用原文件是相同的效果: 创建和删除 创建:mkdir 删除:rm 删除非空目录:rm -rf file目录 删除日志 $rm *log 等价: $