expect for java_Linux expect 用法
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 用法相关推荐
- linux expect中文,Linux expect用法介绍
1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect 获取上一命令执 ...
- linux expect函数,Linux expect 用法(示例代码)
用法 1. [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来执行.这里的expect其实和Linux下的bash.windows下的cmd是一类东西. 注意 ...
- linux expect 字符串,linux expect 用法
一.概述 我们通过Shell可以实现简单的控制流功能如循环.判断等.但是对于需要交互的场合则必须通过人工来干预有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能.而Expect就使 ...
- expect() php,Linux expect 的安装
expect是建立在tcl基础上的一个工具,它还提供了一些Tcl所没有的命令,它可以用来做一些linux下无法做到交互的一些命令操作,在远程管理方面发挥很大的作用. 因为expect是基于tcl的,所 ...
- expect监控 雏形 scp用法
scp命令用法: scp 用户名@密码:文件目录名字 用户名@密码:目录名字 例子: A . scp root@192.168.100.130:/root/atest.txt /root/btes ...
- linux yum安装expect,CentOS安装expect
CentOS安装expect 发布时间:2020-02-25 10:04:28 来源:51CTO 阅读:49 作者:844365389 expect是在tcl基础上创建起来的,因此在安装expect之 ...
- linux expect 通配符,Expect实例与expect使用简介
Expect可用于处理交互式程序:Expect is a program that "talks" to other interactive programs accordi ...
- linux ssh expect,linux命令expect实现ssh登陆
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题.那么你知道linux命令expect实现ssh登陆么?接下来是小编为大 ...
- shell expect的简单用法
为什么需要expect? 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...
最新文章
- C#拾遗系列(9):继承、接口、扩展方法、分部类、类操作、Ref and Out、可空类型...
- 那些帮助你成为优秀前端工程师的讲座——《性能篇》
- 大话设计模式之策略模式
- springboot运行jar包时候加载指定目录的其他jar支持包
- 顺序表的基本操作(完整代码)
- JLink引脚定义、JTAG引脚定义、SWD引脚定义
- PIL IOError: cannot identify image file './temp.jpg'
- 媒体邀约得3个步骤和5个注意事项
- 测试岗/测试开发岗面试真题及参考答案
- 网络——tcp/ip
- 坚叔:让科幻片的概念变成产品丨编程挑战赛 x 嘉宾分享
- 微信测试说了多少次我爱你的软件,微信解封次数是几次?怎么解封?
- VMware安装虚拟机过程中卡住问题
- 现代软件工程—构建之法》第一章 中出现的计算机专业术语
- UIPATH 收发Outlook邮件
- 龙族幻想微信一区哪个服务器人多,龙族幻想哪个区人最多_龙族幻想哪个区人多一点...
- WinCE下光电编码器的驱动程序设计
- repeater 控件ajax绑定数据源,ASP.NET数据绑定之Repeater控件
- 【Teradata】windows部署安装Teradata数据库(附虚拟机扩展包)
- 杨天宇20190912-2 命令行