expect是建立在tcl基础上的一个工具,它用来让一些需要交互的任务自动化地完成。

因为expect是基于tcl的,所以需要你的系统中安装有tcl

检查是否安装tcl,expect

[root@master shell]# whereis tcl

tcl: /usr/lib64/tcl8.5 /usr/share/tcl8.5

如果没有安装,使用yum安装:

yum install -y tcl

yum install -y expect

expect的4个命令

Expect中最关键的四个命令是send,expect,spawn,interact。

命令

说明

send

用于向进程发送字符串

expect

从进程接收字符串

spawn

启动新的进程

interact

允许用户交互

例1:远程登录并创建文件后退出

#!/usr/bin/expect ##注意路径,使用 [whereis expect] 查看

set user "hadoop" ##设定参数,注意",'的区别

set pwd "yangkun"

set host "48.93.36.144"

set timeout -1 ##;号可有可无

spawn ssh -p 2020 $user@$host

expect { ##expect后有空格

"*yes/no" {send "yes\r";exp_continue}

"*password:" {send "$pwd\r"}

}

expect "]*" ## 通配符,使用 ]* 有效, 使用 *# 无效

send "touch /home/hadoop/aa.txt\r"

expect "]*"

send "echo hello world >> /home/hadoop/aa.txt\r"

expect "]*"

[interact] ##人为交互

send "exit\r" ##退出

例2:配置免密登录并安装JDK

#!/bin/bash

#!/usr/bin/expect

SERVERS="114.114.114.114"##数组以空格分隔,可以为目标ip 或者hostName

PASSWORD="yangkun"

## 实现免密登录配置的函数

auto_ssh_copy_id() {

expect -c "set timeout -1;

spawn ssh-copy-id \"-p 2020 $1\"; ## 这里要注意,使用'或\'不可行

expect {

*(yes/no)* {send -- yes\r;exp_continue;}

*password:* {send -- $2\r;exp_continue;}

eof {exit 0;}

}";

}

## 循环执行,配置主机到从节点所有免密

ssh_copy_id_to_all() {

for SERVER in $SERVERS## 取值需要加$

do

auto_ssh_copy_id $SERVER $PASSWORD

done

}

## 调用循环配置函数

ssh_copy_id_to_all

## 批量部署

for SERVER in $SERVERS

do

scp install.sh root@$SERVER:/root

ssh root@$SERVER /root/install.sh

done

读取文件中的host配置

让脚本自动读取slaves文件中的机器名来批量安装

cat slaves | while read host

do

echo $host

expect -c "set timeout -f

spawn ssh-copy-id $host"

done

例3:批量配置JDK,install.sh

以root用户执行

#!/bin/bash

BASE_SERVER=master

BASE_PATH=/home/hadoop/soft

TARGET_PATH=/usr/local

JAVA_PATH=$TARGET_PATH/java

## 1.判断是否存在文件夹,不存在则创建soft文件夹

#if [ ! -d "$BASE_PATH" ]; then

#mkdir "$BASE_PATH"

#fi

## 2.从指定host拷贝jdk到目标机器上(已经拷贝文件夹)

scp -r $BASE_SERVER:$BASE_PATH $BASE_PATH

## 2.解压jdk到指定目录

if [ ! -d "$JAVA_PATH" ]; then

sudo -S mkdir -p "$JAVA_PATH"

fi

## 赋予权限

sudo -S chmod -R hadoop:hadoop $JAVA_PATH

tar -zxvf $BASE_PATH/jdk1.8.0_121.tar.gz -C $JAVA_PATH

## 3.配置环境变量

sudo -S cat>>/etc/profile<

export JAVA_HOME=$JAVA_PATH/jdk1.8.0_121

export PATH=\$PATH:\$JAVA_HOME/bin

EOF

expect for java_Linux expect 用法相关推荐

  1. linux expect中文,Linux expect用法介绍

    1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect 获取上一命令执 ...

  2. linux expect函数,Linux expect 用法(示例代码)

    用法 1. [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来执行.这里的expect其实和Linux下的bash.windows下的cmd是一类东西. 注意 ...

  3. linux expect 字符串,linux expect 用法

    一.概述 我们通过Shell可以实现简单的控制流功能如循环.判断等.但是对于需要交互的场合则必须通过人工来干预有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能.而Expect就使 ...

  4. expect() php,Linux expect 的安装

    expect是建立在tcl基础上的一个工具,它还提供了一些Tcl所没有的命令,它可以用来做一些linux下无法做到交互的一些命令操作,在远程管理方面发挥很大的作用. 因为expect是基于tcl的,所 ...

  5. expect监控 雏形 scp用法

    scp命令用法: scp  用户名@密码:文件目录名字 用户名@密码:目录名字 例子: A . scp root@192.168.100.130:/root/atest.txt  /root/btes ...

  6. linux yum安装expect,CentOS安装expect

    CentOS安装expect 发布时间:2020-02-25 10:04:28 来源:51CTO 阅读:49 作者:844365389 expect是在tcl基础上创建起来的,因此在安装expect之 ...

  7. linux expect 通配符,Expect实例与expect使用简介

    Expect可用于处理交互式程序:Expect  is  a  program that "talks" to other interactive programs accordi ...

  8. linux ssh expect,linux命令expect实现ssh登陆

    SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题.那么你知道linux命令expect实现ssh登陆么?接下来是小编为大 ...

  9. shell expect的简单用法

    为什么需要expect?     我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...

最新文章

  1. C#拾遗系列(9):继承、接口、扩展方法、分部类、类操作、Ref and Out、可空类型...
  2. 那些帮助你成为优秀前端工程师的讲座——《性能篇》
  3. 大话设计模式之策略模式
  4. springboot运行jar包时候加载指定目录的其他jar支持包
  5. 顺序表的基本操作(完整代码)
  6. JLink引脚定义、JTAG引脚定义、SWD引脚定义
  7. PIL IOError: cannot identify image file './temp.jpg'
  8. 媒体邀约得3个步骤和5个注意事项
  9. 测试岗/测试开发岗面试真题及参考答案
  10. 网络——tcp/ip
  11. 坚叔:让科幻片的概念变成产品丨编程挑战赛 x 嘉宾分享
  12. 微信测试说了多少次我爱你的软件,微信解封次数是几次?怎么解封?
  13. VMware安装虚拟机过程中卡住问题
  14. 现代软件工程—构建之法》第一章 中出现的计算机专业术语
  15. UIPATH 收发Outlook邮件
  16. 龙族幻想微信一区哪个服务器人多,龙族幻想哪个区人最多_龙族幻想哪个区人多一点...
  17. WinCE下光电编码器的驱动程序设计
  18. repeater 控件ajax绑定数据源,ASP.NET数据绑定之Repeater控件
  19. 【Teradata】windows部署安装Teradata数据库(附虚拟机扩展包)
  20. 杨天宇20190912-2 命令行

热门文章

  1. 表格控件Aspose.Cells for .NET 授权须知
  2. surfaceflinger分析
  3. java消息路由_SIP消息路由机制
  4. Java调用百度OCR接口实现文字识别
  5. 奇迹暖暖安卓鸿蒙互通吗,奇迹暖暖安卓和ios可以通用么 奇迹暖暖ios和安卓是否互通...
  6. 记录攻防世界web进阶
  7. 查询Active Directory
  8. 【书评】一本Android系统性能优化的新书
  9. python web.py
  10. 考古 dotnet 的不同版本