关键词:
Expect是Linux操作系统下的一个用来处理交互操作,系统默认是没有安装expect库,所以执行expect会提示找不到命令,需要手动安装,其它安装也比较简单,可以通过二进制源码包编译配置进行安装,也可以通过网络借助yum源来安装,yum源安装比较简单;我们下面借助Expect库来实现Linux交互式自动化运维操作,只需要执行脚本就可以实现自动化运维操作,不需要手动输入一些信息按确定,我们可以将交互过程写在一个脚本上,使之自动化完成。我们可以通过expect实现ssh自动登录、ftp自动登录、自动传输文件、自动创建和删除用户等都符合交互式自动化运维。下面我们会通过一些案例来展现结果,我们通过以下几个命令来介绍四个基础命令。
Linux在企业中应用还是比较广泛,而且expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。expect是不断的更新,随着时间的流逝,其功能越来越强大,对Linux有基本的了解都知道这个命令,而且是Linux操作系统管理员必不可少的一个命令,常用的shell脚本都需要用到这个工具,可以省去运维大量的操作时间,有利于提高工作效率,如果对Linux不太了解的可以去购物平台去搜刘遄老师的《Linux就该这么学》这本书学习,书籍内容比较适合初学者,也有好多案例比较适合企业常用的一些操作,expect需要Tcl编程语言的支持,要在系统上运行expect必须首先安装Tcl。
我们通过yum源来简单的介绍下expect需要安装哪几个库,如果要通过二进制tar.gz包安装也可以,需要去下载expect.tar.gz安装包,这里就不介绍了,操作如下:
yum install expect.x86_64 expect-devel.x86_64 -y
下面详细的解释四个基础命定,expect中最关键的四个命令是:send,expect,spawn,interact。
1、send:用于向进程发送字符串;
2、expect:从进程接收字符串;
3、spawn:启动新的进程;
4、interact:允许用户交互;
-
send命令
send命令接收一个字符串的参数,并且将该参数发送到进程。
[[email protected] ~]# expect
expect1.1> send "hello world\n"
hello world
expect1.2> - expect命令
expect命令和send命令执行的结果正好相反,expect是用来等待一个进程的反馈消息,expect可以接收一个字符串参数,也可以接收正则表达式参数,一般都是与send命令结合使用才能看到明细的效果,下面我们可以用一个最简单的交互式的案例来展示效果:
expect "hi\n"
send "hello there!\n"
上面两行代码的意思是:从标准输入中等到hi和换行键后,向标准输出输出hello there。
Expect还有一种最常用的语法是来自tcl语言的模式-动作,这种语法在shell中应用极其灵活,使用也非常方便,下面我们就各种语法用案例来说明
expect "hello" send " hello "
- spawn命令
上面的所有案例都是和标准输入输出进行交互,但是我们更希望他可以和某一个进程进行交互。spawm命令就是用来启动新的进程的。spawn后的send和expect命令都是和spawn打开的进程进行交互的。结合上面的send和expect命令我们可以实现一个更复杂点的shell程序。vim test.sh
set timeout -1 //设置永不超时;
spawn ssh -p 22 [email protected] //开启新的进程ID,该进程的用户连接远程ssh服务器;
expect "*Password" //进程返回Password时;
send "password\r" //向进程输入password\r,这里是输入是root用户的密码
下面是测试脚本的结果:
这段代码的作用是实现登录到ssh服务器192.168.3.9的root账号上,这段shell代码中用到interact,下面我们就来详细的介绍这个命定;
4.interact
到现在为止,我们已经可以结合spawn、expect、send自动化的完成很多任务了。但是,如何让人在适当的时候干预这个过程了。比如ssh登录到服务器上面要执行什么操作,仍然可以停留在ssh服务器登录状态,以便手动的执行后续命令。interact可以达到这些目的。下面的案例是在自动登录ssh服务器后,允许用户交互操作。
#!/usr/bin/expect
spawn ssh [email protected]
expect "*password:"
send "password\r"
spawn sleep 10
interact
exit
这个案例其实和上面这个差不多,但是这个多了一个自动退出功能,设置登录成功10s后自动退出。
Expect在shell中也是一个比较复杂的库,如果想深入的了解,自己也要多结合理论和实践操作一起进行,这样学习起来还是比较快的,还可以通过shell实现简单的控制功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如ssh服务器等进行交互的功能,而expect就使用来实现这种功能的工具,希望本文章会给大家有所帮助。
linux-shell交互式自动化运维程序
...装,yum源安装比较简单;我们下面借助Expect库来实现Linux交互式自动化运维操作,只需要执行脚本就可以实现自动化运维操作,不需要手动输入一些信息按确定,我们可以 查看详情
expect自动交互式程序
1.Expect自动交互式程序介绍及安装1.1Expect介绍 Expect是一个用来实现自动化交互功能的软件套件。1.2为什么使用Expect 在现今的企业运维中,自动化运维已经成为运维的主流趋势,但是在很多情况... 查看详情
shell脚本——与linuxshell自动交互(代码片段)
自动交互的关键是交互信息的自动输入;一、自动交互方法一——重定向1需求从一台Linux机器ftp登录到另一台Linux机器,进行系列操作后关闭;2自动交互方法使用“command<<delimiter”,从标准输入中读入,... 查看详情
自动化运维脚本语言之expect实践学习
...动化的人机交互;也能够按照脚本内容里面设定的方式与交互式程序进行“会话”的程序,根据脚本内容expect可以知道程序会提示或反馈什么内容以及什么是正确的应答;它是一种可以提供“分支和嵌套结构”来引导程序流程的... 查看详情
脚本达人总结的linuxshell脚本编写经验,看完不踩坑
点击上方关注“终端研发部”设为“星标”,和你一起掌握更多数据库知识无论是系统运维,还是应用运维,均可分为“纯手工”—>“脚本化”—>“自动化”—>“智能化”几个阶段,其中自动化阶段,... 查看详情
小型自动化运维--expect入门知识
小型自动化运维--expect入门知识Expect的自动交互工作流程简单说明:spawn启动指定进程-->expect获取期待的关键字-->send向指定进程发送指定字符-->进程执行完毕,退出脚本。spawn命令如果没有spawn命令,expect程序将会无法实现... 查看详情
expect自动化交互软件
...对简单的一种免费的脚本编程工具语言,用来实现自动和交互式任务程序进行通信,无需人的手工干预,如:SSH、FTP等。这些程序正常情况下都需要手工进行交互,而使用expect就可以模拟人手工交互的过程,实现自动和远端程序... 查看详情
pexpect之命令行程序进行自动交互
、Pexpect是一个用来启动子程序并对其进行自动控制的纯Python模块。pexpecthttp://pexpect.readthedocs.io/en/stable/Pexpect:系统批量运维管理器!!!http://9399369.blog.51cto.com/9389369/1762685探索Pexpect,第1部分:剖析Pexpecthttps://www.ibm.com/develo 查看详情
运维自动化(代码片段)
...用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条... 查看详情
:初识linuxshell
shell及脚本简介GNU/Linuxshell是个交互工具,它为用户提供了启动程序、管理文件系统上的文件以及管理运行在Linux系统上的进程的途径shell的核心是命令行提示符它是shell的交互部分它允许你输入文本命令,之后将结束命令... 查看详情
linuxshell脚本如何自动运行程序并输入命令
linux下可以使用crontab计划任务实现自动运行程序追问查看了下资料好像不行吧,能否给个小例子。呵呵追答所谓计划任务就是按周期执行比如08***/youshell.sh>/dev/null表示每天8点执行一次如果你仅仅需要执行一次,那么可以使用at... 查看详情
运维linuxshell编程之函数使用(代码片段)
前言使用linux的shell编程,可以说函数是非常重要的内容,也是在编写各类shell脚本的时候经常用到的,本篇将介绍下函数相关的使用。shell函数分类系统函数自定义函数系统函数系统函数为linux自带的函数,可以在shell... 查看详情
linux运维应该怎么去学习?
...inux磁盘与文件系统、Linux三剑客之sed命令等。第三阶段:LinuxShell基础LinuxShell基础包括:Shell编程基础、Linux三剑客之awk命令等。第四阶段:Linux网络基础第五阶段:Linux网络服务Linux网络服务包括:集群实战架构开始及环境准备、... 查看详情
linuxshell脚本如何自动运行程序并输入命令
我想在linux平台上自动运行某一个App(与windows平台上功能一样)。这个App打开后要输入一些自定义的参数,如i,就是登陆某一个服务器等等。我在windows平台上用vbs写好了,可以运行,想请问下linux下如何编写shell脚本实现同样的... 查看详情
linux操作系统中expect如何使用?
参考技术A 在Linux系统中,expect是一个自动化交互套件,也是一个用来处理交互的命令;利用expect,我们可以将交互过程写在一个脚本上,让其自动化完成,从而帮助运维人员提高工作效率、节约时间。那么Linux系统中expect该如... 查看详情
自动化运维expect
Mac下载:brewinstallhomebrew/dupes/expect expect:-> 自动化脚本工具: 用于处理交互命令; #注意调用时并不是使用的/bin/bash而是expect#!/usr/local/bin/expect Expect中最关键的四个命令是send,expect,spawn,interact。send 查看详情
linux运维之路基础篇:linux基础命令(代码片段)
Linux运维之路基础篇:Linux基础命令(一)Linux哲学宗旨:一切皆文件:把几乎所有的资源,包括硬件设备都组织为文件有众多单一的小程序组成,一个程序制实现一个功能,组成小程序完成复杂操作尽量避免和用户交互:实现脚... 查看详情
程序员简单打造一个灵活智能的自动化运维系统c#实例程序
...被派去管理公司500台计算机。这些机器可能需要执行一些自动化任务,一台台手动操作会把你累死。重复性的工作还是交给电脑处理,怎么解决这个问题呢?一个自动化的运维系统是必须的。自己实现的好处是直观,可以掌握运... 查看详情