Linux环境使用expect自动化工具

Expect工具介绍

Expect 是一个用于自动化控制交互式应用程序的工具,它是由 Don Libes 创建的,作为 Unix 和类 Unix 系统上的一个扩展工具。Expect 使用了 Tcl(Tool Command Language)作为脚本语言,它可以用来自动化那些通常需要人工参与的命令行任务。
Expect 的主要特点和用途包括:

1、自动化交互:Expect 可以模拟用户输入来自动执行交互式命令,比如 ssh 登录、ftp 上传/下载、passwd 更改密码等。
2、脚本语言:Expect 是基于 Tcl 语言的,这意味着它可以利用 Tcl 的编程特性来编写复杂的自动化脚本。
3、模式匹配:Expect 通过匹配程序输出来决定下一步的操作。它等待特定的字符串出现在输出中,然后根据预定义的脚本响应它们。
4、控制多个进程:Expect 可以同时与多个进程进行交云,使得自动化更加强大和灵活。
5、超时处理:Expect 允许设置超时,以避免脚本无限期等待响应。
6、调试支持:Expect 提供了调试工具,帮助开发者理解脚本中的问题。

Expect 的典型应用场景包括:

自动化系统管理任务:比如自动备份、批量更新密码等。
软件测试:自动化测试交云式软件。
网络自动化:自动化配置网络设备,执行远程脚本等。

总之,Expect 是一个非常有用的工具,可以极大地减少重复性的交互式命令操作,提高管理员和开发者的工作效率。

安装

一般Linux的镜像都会有expect安装包,使用镜像配置yum源后即可安装

yum -y install expect

常用命令

spawn:交互程序开始,执行后面的命令或程序,需要进入到 expect 环境才可以执行,不能直接在 shell 环境下执行

expect:从交互程序进程中指定接收信息,如果匹配成功,就执行send的指令交互;否则等待 timeout 后自动退出 expect 语句

send:如果匹配到 expect 接收到的信息,就将 send 中的指令交互传递,执行交互动作。结尾处加上\r表示如果出现异常等待的状态可以进行核查

exp_continue:在expect中多次匹配就需要用到

exit:退出expect脚本

expect eof:spawn进程结束后会向expect发送eof,接收到eof代表该进程结束

set:定义变量

$argv:expect脚本可以接收 bash 的外部传参,可以使用[lindex $argv n],n为0表示一个传参,为1表示第二个传参,以此类推

set timeout:设置超时时间,防止ssh远程主机网络不可达时卡住或远程主机执行命令卡住,如果设置为-1代表不会超时

基本语法

vim test.exp
#!/usr/bin/expect          #expect解析器,与shell中#!/bin/bash类似
set timeout 2          #设置超时时间n秒,表示下面的代码需在n秒钟内完成,如果超时则退出
set ip [lindex $argv 0]      #设置变量,ip地址从外部脚本传入
spawn ssh username@ip        #执行命令,ssh远程登录主机
expect {                     #接收执行命令的返回信息
    "yes/no" { send "yes\r"; exp_continue }   #匹配到"yes/no",发送yes指令并回车执行
    "password:" { send "password\r" }         #匹配到"password:",发送密码并回车

expect"]*"                   #匹配到"]*",发送需要执行的命令并回车
    send "df -h\r"           #发送需要执行的命令
    send "exit\r"            #执行命令后退出BASH

expect eof                   #执行后结束

shell脚本传参给expect

vim test.sh
#!/bin/bash

for i in `cat iplist`    #批量执行涉及多个主机ip,使用for循环获取ip
do
   ip=$i
   ./test.exp $ip        #将ip传参到expect脚本当中
done
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值