expect脚本语言基本用法记录

背景

shell执行命令在路由器交换机等需要等待执行结果确认ok后才能执行下一条命令的场景有些捉襟见肘,expect是一个不错的解决方案。他具有send发送命令 expect阻塞等待执行结果

expect基础用法

Expect 是一种自动化交互式程序的工具,通常用于自动化和测试与命令行程序、脚本或系统之间的交互。它的工作方式是等待一个特定的字符串或模式出现,然后执行相应的操作,如发送输入、执行命令等。下面是 Expect 的一般语法和一个简单的示例:

一个简单的 Expect 示例,模拟登录到远程服务器并执行一些操作:

#!/usr/bin/expect

# 远程服务器信息
set server "example.com"
set username "your_username"
set password "your_password"

# 打开 SSH 连接
spawn ssh $username@$server

# 匹配密码提示并发送密码
expect "password:"
send "$password\r"

# 匹配成功登录后的命令行提示
expect "$username@$server:"
# 发送一个命令
send "ls -l\r"

# 匹配命令执行后的输出
expect "$username@$server:"
# 发送退出命令
send "exit\r"

# 等待退出完成
expect eof

打开一个 SSH 连接,然后匹配密码提示,发送密码,然后匹配成功登录后的命令行提示,发送一个 ls -l 命令,然后匹配命令执行后的输出,最后发送退出命令并等待退出完成。

expect几个常用命令

通常使用以下几个关键命令来实现自动化交互:

  1. spawn:这个命令用于启动一个新的子进程,通常是一个命令行程序或脚本。它的语法如下:

    spawn 命令
    

    例如,spawn ssh user@host 用于启动一个 SSH 会话。

  2. sendsend 命令用于向子进程发送文本输入。它的语法如下:

    send "要发送的文本\r"
    

    注意,\r 用于模拟回车键的按下。例如,send "ls -l\r" 用于向子进程发送 ls -l 命令。

  3. expectexpect 命令用于等待子进程输出中的特定字符串或模式,并执行相应的操作。它的语法如下:

    expect {
        "匹配的字符串或模式1" { 操作1 }
        "匹配的字符串或模式2" { 操作2 }
        ...
    }
    

    例如,expect "Password:" { send "mypassword\r" } 用于等待 “Password:” 出现,然后发送密码。

  4. interactinteract 命令允许用户与子进程交互,将控制权还给用户。它的语法如下:

    interact
    

    这在需要手动干预子进程时很有用。

  5. exp_continueexp_continue 命令用于继续等待下一个匹配模式,而不执行任何操作。它通常与 expect 一起使用,以处理多个匹配条件。

综述

在一些对服务器命令执行上下文要求比较严格以及多条命令有先后关系的场景使用expect比较实用。常见场景是路由器交换机执行 以及服务器登录确认等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值