• expect自动化交互应用程序工具


    目录

    安装 expect

    语法介绍

    基本命令

    控制结构

    变量和字符串

    样例 expect 脚本

    Example 1: 自动登录 SSH 并执行命令

    Example 2: 自动与 FTP 服务器交互

    Example 3: 与 telnet 自动交互

    调试与运行脚本

    调试模式

    运行脚本

    sshpass与expect应用-CSDN博客


      expect 是一个用于自动化交互应用程序的工具,主要在 UNIX 系统上使用。它可以通过脚本控制和自动化与其他交互式程序的对话,例如 sshftptelnet 等等。expect 使得自动执行一些需要用户输入的命令变得非常简单和方便。

    安装 expect

    sudo yum -y install expect

    语法介绍

    基本命令
    • spawn:启动一个进程并进入交互模式。
    • expect:等待特定的模式或字符串出现。
    • send:发送字符串到启动的进程(模拟用户输入)。
    • interact:允许用户接管控制,手动进行交互。
    • exp_continue:继续期待下一个模式匹配,这是在 expect 块中常用的命令。
    • expect eof :  结束expect匹配

    控制结构
    • if:条件判断语句。
    • while:循环语句。
    • for:for 循环语句。

    变量和字符串
    • set:定义和赋值变量。
    • $:用于引用变量。

    样例 expect 脚本

    Example 1: 自动登录 SSH 并执行命令
    1. #!/usr/bin/expect
    2. # 设置超时时间为20
    3. set timeout 20
    4. # 变量定义
    5. set host "your.server.com"
    6. set user "your_username"
    7. set password "your_password"
    8. # 开始SSH会话
    9. spawn ssh $user@$host
    10. # 等待各种可能的提示信息
    11. expect {
    12. "yes/no" {
    13. send "yes\r";
    14. exp_continue
    15. }
    16. "*assword:" {
    17. send "$password\r"
    18. }
    19. }
    20. # 执行命令
    21. expect "$ " { send "ls -l\r" }
    22. expect "$ " { send "echo 'Hello, World!'\r" }
    23. expect "$ " { send "exit\r" }
    24. # 等待会话结束
    25. expect eof

    Example 2: 自动与 FTP 服务器交互
    1. #!/usr/bin/expect
    2. # 设置超时时间
    3. set timeout 20
    4. # 变量设置
    5. set server "ftp.example.com"
    6. set user "your_username"
    7. set password "your_password"
    8. # 开始FTP会话
    9. spawn ftp $server
    10. # 期待用户名提示
    11. expect "Name*"
    12. send "$user\r"
    13. # 期待密码提示
    14. expect "Password:"
    15. send "$password\r"
    16. # 登录后的交互
    17. expect "ftp>" { send "ls\r" }
    18. expect "ftp>" { send "get example.txt\r" }
    19. expect "ftp>" { send "bye\r" }
    20. # 等待会话结束
    21. expect eof

    Example 3: 与 telnet 自动交互
    1. #!/usr/bin/expect
    2. # 设置超时时间
    3. set timeout 20
    4. # 变量设置
    5. set host "your.telnetserver.com"
    6. set user "your_username"
    7. set password "your_password"
    8. # 启动telnet会话
    9. spawn telnet $host
    10. # 等待各种可能的提示信息
    11. expect {
    12. "login:" { send "$user\r" }
    13. "Username:" { send "$user\r" }
    14. "*username:" { send "$user\r" }
    15. }
    16. # 期待出现的密码提示
    17. expect "*assword:" { send "$password\r" }
    18. # 登录后执行命令
    19. expect "> " { send "help\r" }
    20. expect "> " { send "exit\r" }
    21. # 等待会话结束
    22. expect eof

    调试与运行脚本

    调试模式

    使用 expect 提供的一些选项可以进行调试。

    • -d:启用调试模式,输出期望和接收到的内容。
    • log_user 1 or log_user 0:打开或关闭标准输出日志。打开时,所有 send 和 expect 操作都会在终端输出。关闭时则不会。

    例如:

    expect -d ./your_expect_script.exp
    

    运行脚本

    保存脚本到文件并确保它具有可执行权限:

    1. chmod +x your_expect_script.exp
    2. ./your_expect_script.exp
  • 相关阅读:
    洛谷P1064[NOIP2006 提高组] 金明的预算方案题解
    vue考核点示例(仅供参考)
    【LeetCode每日一题】——1379.找出克隆二叉树中的相同节点
    程序员8年薪资变化火了,网友直呼:我一年的和人家一个月差不多
    Ajax异步
    Maven实战: 从工程创建自定义archetype
    Go RabbitMQ简介 使用
    Leetcode290. 单词规律
    Spring学习篇(一)
    性能测试必备技能:Prometheus监控平台搭建
  • 原文地址:https://blog.csdn.net/Lzcsfg/article/details/139476626