实现真正的自动化,expect脚本语言使用

实现真正的自动化,expect脚本语言使用


expect中的几个重要句子:

expect的核心是spawn expect send set

spawn 调用要执行的命令

expect 等待命令提示信息的出现,也就是捕捉用户输入的提示:

send 发送需要交互的值,替代了用户手动输入内容

set 设置变量值

interact 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。

expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if....endif

set timeout -1表示无超时时间

set timeout 10表示超时时间为10秒

注意:expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了。

------------------------------------------------------------

实例:ssh 远程登录,发送reboot指令

vim reb.expect

#!/usr/bin/expect -f 
set timeout 10  
set username root  #定义变量
set hostname 192.168.137.28
set password redhat
spawn ssh "[email protected]$hostname"  #执行命令
expect {   #捕捉信息的提示,以进入下一步的命令输入
"yes/no" {send "yes\r";exp_continue}  #exp_continue表示继续下一步
 "password:" {send "$password\r"}
}
expect "#"
send "shutdown -r now\r"  #重启命令
send "exit\r"  #退出登录
expect eof   #终止expect的捕捉
exit

------------------------------

实现停留在远程主机:

#!/usr/bin/expect -f 
set timeout 10
set username root
set hostname 192.168.137.28
set password redhat
spawn ssh "[email protected]$hostname"
expect {
"yes/no" {send "yes\r";exp_continue}
 "password:" {send "$password\r"}
}
expect "#"
send "ll ; df -hT\r"
#send "exit\r"
#expect eof 
interact  #执行完后保持交互的模式,此时可以手工操作
exit

------------------------------------------------------------

在脚本中引用expect脚本:expect -c ""

vim reb.sh

#!/bin/bash 
username="root"
hostname="192.168.137.28"
password="redhat"
expect -c "  #-c 实现调用
##注意凡是-c后调用的内容,如果带有""双引号的话,必须用\进行转义,否则报错
set timeout 10
spawn ssh \"[email protected]$hostname\"
expect {
\"yes/no\" {send \"yes\r\";exp_continue}
 \"password:\" {send \"$password\r\"}
}
expect \"]#\"
send \"ll\r\"
interact
exit
"

--------------

expect -c <<EOF

.......

EOF

使用这个种方式的时候,不能停留在远程主机上

时间: 2024-08-23 23:50:49

实现真正的自动化,expect脚本语言使用的相关文章

expect脚本语言编写

什么是expect expect是基于tcl的相对简单的一个免费的脚本编程工具语言,用来实现自动和交互式任务程序进行通信,无须人手工干预,比如ssh ftp 等,这些程序正常情况下都需要手工与他们进行交互,而使用expect就可以模拟人手工交互的过程,实现自动的和远端的程序交互,从而到达自动化的目的 expect程序工作流程 expect的工作流程可以理解为,spawn启动进程----->expect期待关键字----->send向进程发送字符------>退出结束 安装expect软件

expect脚本语言用法示例

#!/usr/bin/expect set hostname [lindex $argv 0] set username [lindex $argv 1] set passwd [lindex $argv 2] set dbname [lindex $argv 3] set timeout 10 #spawn /usr/bin/ssh [email protected]$hostname #expect { # "yes/no" { send "yes";exp_c

分发系统介绍、expect脚本远程登录、expect脚本远程执行命令、expect脚本传递参数

20.27 分发系统介绍 应用场景 当业务越做越大,服务器需求越来越多,几台服务器的话还好一点:当十几.几十台的时候,工作量就非常大!并且不规范,需要一个模板机分发到各个机器上去. 可以用开源的软件,expect脚本语言,进行实现分发系统的功能. 20.28 expect脚本远程登录 yum install -y expect 自动远程登录,并执行命令 #!/usr/bin/expect set host "192.168.21.130" set passwd "rootro

分发系统介绍,expect脚本远程登录,expect脚本远程执行命令,expect脚本传递参数

分发系统介绍 当我们要上线一个新代码的时候,如果机器少,我们的工作量不会很大,很容易完成,如果设备很多,有几十台,上百台的话,那我们的工作量会非常大,而且也不规范,这时,我们就可以用可以用开源的软件,expect脚本语言,进行实现分发系统的功能. expect脚本远程登录首先yum安装expectyum install -y expect 然后写一个expect的远程登录脚本#! /usr/bin/expectset host "192.168.133.132" 这是expect的变量

分发系统介绍,expect脚本远程登录, expect脚本远程执行命令, expect脚本传递参数

分发系统介绍 当我们要上线一个新代码的时候,如果机器少,我们的工作量不会很大,很容易完成,如果设备很多,有几十台,上百台的话,那我们的工作量会非常大,而且也不规范,这时,我们就可以用可以用开源的软件,expect脚本语言,进行实现分发系统的功能. expect脚本远程登录 首先yum安装expectyum install -y expect 然后写一个expect的远程登录脚本#! /usr/bin/expectset host "192.168.133.132" 这是expect的变

分发系统介绍、 expect脚本远程登录、远程执行命令、传递参数

一.分发系统介绍 当我们要上线一个新代码的时候,如果机器少,我们的工作量不会很大,很容易完成,如果设备很多,有几十台,上百台的话,那我们的工作量会非常大,而且也不规范,这时,我们就可以用可以用开源的软件,expect脚本语言,进行实现分发系统的功能. 二. expect脚本远程登录 1.expect脚本远程登录2.安装:yum install -y expect3.写一个expect的自动远程登录脚本内容如下: #! /usr/bin/expect set host "192.168.1.31&

自动化运维脚本语言之expect实践学习(1)

一.expect简介 expect是一种简单的基于Tcl的脚本语言工具,一个可实现自动交互功能的软件套件,其功能就是进行自动化的人机交互:也能够按照脚本内容里面设定的方式与交互式程序进行"会话"的程序,根据脚本内容expect可以知道程序会提示或反馈什么内容以及什么是正确的应答:它是一种可以提供"分支和嵌套结构"来引导程序流程的解释型脚本语言. shell功能虽然强大,但是不能实现有交互功能的多机器之间的操作例如ssh和ftp,而expect可以帮助我们来实现. 主

小型自动化运维--expect脚本之自动同步

小型自动化运维--expect脚本之自动同步 expect脚本可以运用于自动化运维多个方面,例如:可以自动到远程机器执行命令,也可以传输文件到远程机器上. 脚本如下: #!/usr/bin/expect set passwd "wtf" spawn rsync -av [email protected]:/tmp/shiyan.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:&

小型自动化运维--expect脚本V2版

小型自动化运维--expect脚本V2版 在实际运维工作中,需要我们向远程主机同步数据,可以用rsync来实现.那么用expect脚本怎么实现数据传输完成之后自动退出远程主机呢?在开始expect脚本V2版之前,我们先来看下,使用expect脚本来实现远程主机的登入,脚本如下: #! /usr/bin/expect set host "192.168.8.120" set passwd "wtf" spawn ssh [email protected]$host e