文章目录
expact简介
expact可以做什么
- 我们可以通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预。最近因为项目需要一个小脚本,先自动认证kerberos,然后进行其他一系列操作。会需要实现和交互程序如telnet服务器等进行交互的功能。而expect就使用来实现这种功能的工具。
什么是expact
- expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。
expect安装
-
expect在centos下的安装非常简单,直接通过npm安装就可以。
sudo yum install expect
-
直接yes
-
安装完成
expact使用
expact原理
- Expect的原理:
Expect脚本语言自动提交输入到交互程序,它的工作原理是等待特定字符串,并发送或者响应相应的字符串。以完成对于的自动化交互任务,如自动登录等;
expact命令
-
修改脚本执行器
修改第一行指示了这个脚本要用哪个程序来运行;#!/usr/bin/expect -f
-
spawn
在EXPECT下启动了一个我们要执行的程序,这个程序也是expact脚本监控输出的程序,相当于判断条件spawn:启动命令
-
expect
我们要告诉expect,当什么信息出现时需要expect帮助我们完成交互;expect:等待来自进程的特定的字符串
-
send
当符合expact的内容出现时,要发送的内容;send:发送字符串到进程
-
interact
是保持交互,不要退出。没有这句的话,完成后会自动退出。interact:允许用户交互
-
获取参数
expact不使用$1,$2等获取输入参数# 代表输入的第一个参数 [lindex $argv 0] # 代表输入的第二个参数 [lindex $argv 1]
expact使用demo
demo1
- 通过ssh到其他的机器上执行hive终端,获取test库下的所有表
执行命令脚本
work脚本
- 新建work脚本
# 新建脚本文件 touch work_hive.sh # 赋权 chmod +x ./work_hive.sh
- 脚本内容
#/bin/bash ssh test1 hive
expect脚本
- 新建监控work脚本
# 新建脚本文件 touch test_hive.sh # 赋权 chmod +x ./test_hive.sh
- 脚本内容
# 命令解释器 #!/usr/bin/expect -f # 输入库名 set DB_ID [lindex $argv 0] # 监控的脚本 spawn ./work_hive.sh # 检测字符串 expect "Are you sure you want to continue connecting (yes/no)?" # 输出对应内容,\r代表回车 send "yes\r" expect "@test1's password:" send "123456\r" expect "hive> " send "use $DB_ID;\r" expect "hive (test)> " send "show tables;\r" interact