shell脚本之expact

expact简介

expact可以做什么

  • 我们可以通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预。最近因为项目需要一个小脚本,先自动认证kerberos,然后进行其他一系列操作。会需要实现和交互程序如telnet服务器等进行交互的功能。而expect就使用来实现这种功能的工具。

什么是expact

  • expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。

expect安装

  • expect在centos下的安装非常简单,直接通过npm安装就可以。

    sudo yum install expect
    
  • 直接yes
    安装1

  • 安装完成
    安装2

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
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值