【Linux之·expect】

系列文章目录



前言

  expect 是由Don Libes基于Tcl(Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。


一、概述

  Expect是一种自动化交互式工具,可以模拟用户输入并响应输出。它具有多种应用领域,如自动化测试、系统管理、网络管理等。

1.expect使用原理

(1)原理介绍:

spawn启动指定进程——expect获取指定关键字——send向指定程序发送指定字符——执行完成退出

(2)spawn命令介绍:

spawm命令就是用来启动新的进程的。spawn后的send和expect命令都是和spawn打开的进程进行交互的

(3)send命令介绍:

send命令接收一个字符串参数,并将该参数发送到进程,这个过程类似模拟人类输入密码

(4)interact命令介绍:

结合spawn、expect、send自动化的完成很多任务,interact命令可以在适当的时候进行任务的干预,比如下载完ftp文件时,仍然可以停留在ftp命令行状态,以便手动的执行后续命令

2.常用指令

指令说明
set timeout设置超时时间,表示该脚本代码需在n秒钟内完成,如果超过,则退出。如果设置为-1表示不会超时
spawn交互程序开始后面跟命令或者指定程序(在壳内启动这个进程)
expectexpect 从交互程序进程中指定接收信息, 如果匹配成功, 就执行send的指令交互;否则等待timeout秒后自动退出expect语句
send如果匹配到expect接受到的信息,就将send中的指令交互传递,执行交互动作。(从壳外向壳内进程发送一条字符串,回车符为确认结束)
interact执行完代码后保持交互状态,将控制权交给用户。没有该命令执行完后自动退出而不是留在远程终端上
exit退出expect脚本
eofspawn进程结束后会向expect发送eof,接收到eof代表该进程结束
exp_continue表示循环式匹配,通常匹配之后都会退出语句,但如果有exp_continue则可以不断循环匹配,输入多条命令,简化写法。
send_user用来打印输出 相当于shell中的echo
set定义变量
puts输出变量
$argv expect脚本可以接受bash的外部传参,可以使用[ lindex $argv n ]n为0表示第一个传参,为1表示第二个传参,以此类推

二、示例

1.不需要用户交互

#!/usr/bin/expect
set timeout 10

spawn ssh root@192.168.1.200

expect "*password:"
send "123456\r"

expect "#"
send "ls\r"

expect "#"
send "date\r"

expect "#"
send "exit\r"

expect eof

2.需要用户交互

#!/usr/bin/expect
set timeout 10

spawn ssh root@192.168.1.200

expect "*password:"
send "123456\r"

expect "#"
interact

总结

  总之,学习Expect需要坚持实践,不断尝试和调试,加深对Expect的理解和掌握。通过不断积累经验,可以在工作中更加高效地利用Expect进行自动化操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值