小型自动化运维--expect入门知识

简介:

小型自动化运维--expect入门知识


Expect的自动交互工作流程简单说明:

spawn启动指定进程-->expect获取期待的关键字-->send向指定进程发送指定字符-->进程执行完毕,退出脚本。

  1. spawn命令

    如果没有spawn命令,expect程序将会无法实现自动交互。

    spawn命令的语法为:

    spawn [选项] [需要自动交互的命令或程序]

    例如:spawn ssh root@192.169.5.74 uptime 

    说明:在spawn命令的后面,直接加上要执行的命令或程序(如上例的ssh命令)等,除此之外,spawn还支持一些选项(了解即可!)

    -open:表示启动文件进程;

    -ignore:表示忽略某些信号;

  2. expect命令

    expect命令的语法为:

    expect 表达式 [动作]

    例如:spawn ssh root@192.169.5.74 uptime 

        expect "*password" {send "root\r"}

    说明:上述命令不能直接在linux命令行中执行,需要放入expect脚本中进行。

  3. 根据上述两个命令,写一个简单的expect脚本

    方法一:

    #!/usr/bin/expect    ##可以使用which expect查看

    spawn ssh root@192.169.5.74 uptime

    expect "yes/no" {send "yes\n"}

    expect "*password" {send "root\n"}   ##\n表示换行,这里也可以使用\r表示回车

    expect eof    ##想要输出结果,必须加上eof(end of file),表示expect的结束

    执行的结果如下:

    wKiom1l1iYShhNf4AAAXr11UBLg578.png

    方法二:

    将expect与send不放在同一行,这样就不需要使用{}(大括号)了,上面的例子可以改成:

    #!/usr/bin/expect

    spawn ssh root@192.169.5.74 uptime

    expect "yes/no"

    send "yes\n"

    expect "*password"

    send "root\n"

    expect eof

    执行的结果如上!

  4. exp_send、exp_continue与多行expect的用法举例

    #!/usr/bin/expect

    spawn ssh root@192.169.5.74 uptime

    expect {

    #   "yes/no" {exp_send "yes\r";exp_continue}

    #   "*password" {exp_send "root\n"}

       "yes/no" {send "yes\r";exp_continue}

       "*password" {send "root\n"}

    }

    expect eof

    说明:(1)exp_send和send类似,后面的\r(回车),\n(换行);

        (2)expect {},类似于多行expect;

        (3)匹配多个字符串,需要在每次匹配并执行动作后,加上exp_continue。

  5. send_user命令,类似shell里的echo命令

    #!/usr/bin/expect

    send_user "My name is wtf.\n"

    send_user "I am a linuxer,\t"  ##制表符

    send_user "My blog is www.wutengfei.blog.51cto.com\n"

    执行的结果如下:

    wKioL1l1lhCwg5J5AAAQkhf6c_M003.png

  6. exit命令

    exit命令功能类似于shell中的exit,即直接退出Expect脚本,除了最基本的退出脚本功能之外,还可以利用这个命令对脚本做一些关闭前的清理和提示等工作,举例如下:

    #!/usr/bin/expect

    send_user "My name is wtf.\n"

    send_user "I am a linuxer,\t"

    send_user "My blog is www.wutengfei.blog.51cto.com\n"

    exit -onexit {

      send_user "Good bye.\n"

    }

    执行结果如下:

    wKiom1l1l5WC6lk2AAAS44xhkWg848.png

  7. expect程序变量

    (1)普通变量

    定义变量的基本语法如下:

    set 变量名 变量值

    如:set password "root"

    打印变量的两种方法:

    方法一:

    puts $变量名

    如:puts $password

    方法二:

    send_user "$password\n"

    举例如下:

    #!/usr/bin/expect

    set password "root"

    puts $password

    send_user "$password\n"

    执行结果如下:

    wKioL1l1nZjiEXE5AAAIzgJKKWM272.png

    (2)特殊变量

    在Expect里也有与shell脚本里的$0、$1、$#等类似的特殊参数变量,用于接收及控制Expect脚本传参。在Expect中$argv表示参数数组,可以使用[lindex $argv n]接收Expect脚本传参,n从0开始,分别表示第

    说明:[lindex $argv 0]相当于shell中的$1,[lindex $argv 2]相当于shell中的$2;$argv0(相当于shell中$0)表示脚本的名字;$argc(相当于shell中$#)表示参数的总个数。

    #!/usr/bin/expect

    #define var

    set file [lindex $argv 0]

    set host [lindex $argv 1]

    set dir  [lindex $argv 2]

    send_user "$file\t$host\t$dir\n"

    puts "$file\t$host\t$dir\n"

    puts $argv0

    puts $argc

    执行结果如下:

    wKioL1l1n-_TXMUNAAAXjBOGPII826.png

  8. 一个[lindex $argv 0]参数,第二个[lindex $argv 1]参数。。。



     本文转自品鉴初心51CTO博客,原文链接:http://blog.51cto.com/wutengfei/1950472,如需转载请自行联系原作者





相关文章
|
10天前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
32 4
|
2天前
|
测试技术 持续交付 开发者
探索自动化测试的无限可能:从入门到精通
在软件开发领域,确保产品质量是至关重要的。自动化测试作为一种高效、可靠的测试方法,正逐渐成为行业标准。本文将带你深入了解自动化测试的世界,从基础概念到实践技巧,帮助你掌握这一强大的工具。无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和启发。
|
6天前
|
存储 运维 监控
高效运维:从基础架构到自动化管理的全面指南
【10月更文挑战第11天】 本文将深入探讨如何通过优化基础架构和引入自动化管理来提升企业IT运维效率。我们将从服务器的选择与配置、存储解决方案的评估,到网络的设计与监控,逐一解析每个环节的关键技术点。同时,重点讨论自动化工具在现代运维中的应用,包括配置管理、持续集成与部署(CI/CD)、自动化测试及故障排除等方面。通过实际案例分析,展示这些技术如何协同工作,实现高效的运维管理。无论是IT初学者还是经验丰富的专业人员,都能从中获得有价值的见解和实操经验。
17 1
|
8天前
|
运维 监控 测试技术
构建高效运维体系:从监控到自动化的实践之路
【10月更文挑战第9天】 在当今信息技术飞速发展的时代,运维作为保障系统稳定性与效率的关键角色,正面临前所未有的挑战。本文将探讨如何通过构建一个高效的运维体系来应对这些挑战,包括监控系统的搭建、自动化工具的应用以及故障应急处理机制的制定。我们将结合具体案例,分析这些措施如何帮助提升系统的可靠性和运维团队的工作效率。
24 1
|
10天前
|
运维 jenkins 持续交付
自动化部署的魅力:如何用Jenkins和Docker简化运维工作
【10月更文挑战第7天】在现代软件开发周期中,快速且高效的部署是至关重要的。本文将引导你理解如何使用Jenkins和Docker实现自动化部署,从而简化运维流程。我们将从基础概念开始,逐步深入到实战操作,让你轻松掌握这一强大的工具组合。通过这篇文章,你将学会如何利用这些工具来提升你的工作效率,并减少人为错误的可能性。
|
10天前
|
存储 运维 监控
高效运维管理:从基础架构优化到自动化实践
在当今数字化时代,高效运维管理已成为企业IT部门的重要任务。本文将探讨如何通过基础架构优化和自动化实践来提升运维效率,确保系统的稳定性和可靠性。我们将从服务器选型、存储优化、网络配置等方面入手,逐步引导读者了解运维管理的核心内容。同时,我们还将介绍自动化工具的使用,帮助运维人员提高工作效率,降低人为错误的发生。通过本文的学习,您将掌握高效运维管理的关键技巧,为企业的发展提供有力支持。
|
13天前
|
运维 监控 安全
构建高效运维体系:从监控到自动化的全面指南在当今数字化时代,运维作为保障系统稳定性和效率的重要环节,其重要性不言而喻。本文将深入探讨如何构建一个高效的运维体系,从监控系统的搭建到自动化运维的实施,旨在为读者提供一套完整的解决方案。
本文详细介绍了高效运维体系的构建过程,包括监控系统的选择与部署、日志分析的方法、性能优化的策略以及自动化运维工具的应用。通过对这些关键环节的深入剖析,帮助运维人员提升系统的可靠性和响应速度,降低人工干预成本,实现业务的快速发展和稳定运行。
|
14天前
|
运维 监控 网络安全
Python 在网络运维方面的自动化应用实例
Python 在网络运维方面的自动化应用实例
39 4
|
14天前
|
机器学习/深度学习 运维 监控
提升运维效率:自动化工具与实践的融合
【10月更文挑战第3天】 在当今信息技术迅猛发展的时代,运维作为保持系统稳定性和性能的关键角色变得越来越重要。本文将探讨如何通过结合自动化工具和最佳实践来优化运维流程,实现高效、可靠的运维管理。从基础监控到高级自动化,我们将一步步引导您了解如何搭建和维护一个高效的运维体系。
22 3
|
15天前
|
运维 Prometheus 监控
运维中的自动化实践每月一次的系统维护曾经是许多企业的噩梦。不仅因为停机时间长,更因为手动操作容易出错。然而,随着自动化工具的引入,这一切正在悄然改变。本文将探讨自动化在IT运维中的重要性及其具体应用。
在当今信息技术飞速发展的时代,企业对系统的稳定性和效率要求越来越高。传统的手动运维方式已经无法满足现代企业的需求。自动化技术的引入不仅提高了运维效率,还显著降低了出错风险。本文通过几个实际案例,展示了自动化在IT运维中的具体应用,包括自动化部署、监控告警和故障排除等方面,旨在为读者提供一些实用的参考。

热门文章

最新文章