expect for java_Linux expect 用法

本文介绍了基于TCL的Expect工具如何让交互任务自动化,包括send, expect, spawn, interact等核心命令。通过实例演示了远程登录、免密配置和批量JDK部署,展示了其在简化运维和软件部署中的强大作用。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值