小型自动化运维--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,如需转载请自行联系原作者





相关文章
|
6天前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
|
1天前
|
运维 监控 网络安全
Python 在网络运维方面的自动化应用实例
Python 在网络运维方面的自动化应用实例
13 4
|
1天前
|
机器学习/深度学习 运维 监控
提升运维效率:自动化工具与实践的融合
【10月更文挑战第3天】 在当今信息技术迅猛发展的时代,运维作为保持系统稳定性和性能的关键角色变得越来越重要。本文将探讨如何通过结合自动化工具和最佳实践来优化运维流程,实现高效、可靠的运维管理。从基础监控到高级自动化,我们将一步步引导您了解如何搭建和维护一个高效的运维体系。
13 3
|
2天前
|
运维 Prometheus 监控
运维中的自动化实践每月一次的系统维护曾经是许多企业的噩梦。不仅因为停机时间长,更因为手动操作容易出错。然而,随着自动化工具的引入,这一切正在悄然改变。本文将探讨自动化在IT运维中的重要性及其具体应用。
在当今信息技术飞速发展的时代,企业对系统的稳定性和效率要求越来越高。传统的手动运维方式已经无法满足现代企业的需求。自动化技术的引入不仅提高了运维效率,还显著降低了出错风险。本文通过几个实际案例,展示了自动化在IT运维中的具体应用,包括自动化部署、监控告警和故障排除等方面,旨在为读者提供一些实用的参考。
|
3天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
【10月更文挑战第1天】智能化运维:机器学习在故障预测和自动化响应中的应用
18 3
|
4天前
|
机器学习/深度学习 运维 监控
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维工作的重要性日益凸显。随着企业业务的不断扩展和技术的日新月异,传统的运维方式已难以满足现代企业的需求。因此,构建一个高效、智能的运维体系成为了企业发展的关键。本文将探讨如何从自动化逐步演进到智能化,以实现运维工作的高效化和智能化。
|
4天前
|
机器学习/深度学习 运维 监控
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化浪潮中,运维作为信息技术的重要支柱,其重要性日益凸显。本文将探讨如何通过自动化和智能化手段,提升运维效率,保障系统稳定性,促进业务持续发展。
|
7天前
|
运维 监控 网络协议
IT专业入门,高考假期预习指南:运维方向
IT专业入门,高考假期预习指南:运维方向
|
14天前
|
机器学习/深度学习 运维 Cloud Native
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维作为信息技术的重要支柱,其效率与创新能力直接关系到企业信息系统的稳定性和业务连续性。本文将探讨如何通过技术手段,实现运维从传统手工操作向自动化、智能化的转变,进而构建一个高效、可靠的运维体系。我们将从自动化工具的应用开始,逐步深入到智能运维的实践,最终展望云原生架构下的运维未来趋势。
|
15天前
|
运维 监控 关系型数据库
自动化运维:编写基本的自动化脚本
自动化运维:编写基本的自动化脚本
13 1