1. expect概述

1.1 expect的功能

脚本执行时,有时会需要人工进行交互输入,这时可以通过expect工具来实现自动交互。

expect是一种shell解释器,但是expect可以在命令交互时捕捉指定的内容,然后再输出指定的内容。

1.2 安装expect

yum install -y expect 

1.3 一些基本的expect关键字

# 设置expect捕捉的超时时间,单位为秒
set timeout 10 # 使用expect,一般与重定向结合使用,以达到在bash解释器下也能执行捕捉
/usr/bin/expect # 启动新进程,用于执行shell命令
spawn # 与spawn结合使用,使用exp_continue进行多次捕捉
expect {“等待捕捉的内容” {send "需要输入的内容"}} # 发送输入的内容
send # 继续捕捉,不断开会话
exp_continue # 允许用户交互,即此命令之后,交互将不会由expect进行,而是交回给用户
interact

2. expect使用示例

2.1 mysql初始化

#!/bin/bash
# Description: Initialize MySQL Server
# Root password
user='root'
password='woshiniba' set timeout 10 function initMysql() {
/usr/bin/expect << EOF # 表示以下内容将传递给 /usr/bin/expect 程序来执行
spawn /usr/bin/mysql_secure_installation # 表示用spawn来执行这个命令,spawn只能在expect环境中才能执行
expect {
"Enter current password for root (enter for none):" {send "\r";exp_continue} # 这里\r表示回车,也可以使用\n
"Set root password?" {send "Y\r";exp_continue} # exp_continue表示还要继续保持捕捉动作(会话)
"New password" {send "$password\r";exp_continue}
"Re-enter new password" {send "$password\r";exp_continue}
"Remove anonymous users?" {send "Y\r";exp_continue}
"Disallow root login remotely?" {send "n\r";exp_continue}
"Remove test database and access to it?" {send "Y\r";exp_continue}
"Reload privilege tables now?" {send "Y\r";exp_continue}
}
expect eof # 表示结束expect
EOF
} initMysql

2.2 批量做免密登录

#!/bin/bash
# Description: Ansible SSH password free login configuration
# Author: Praywu
# Blog: https://cnblogs.com/hgzero server=('172.18.0.150' '172.18.0.202')
passwd='woshiniba'
key='/root/.ssh/id_rsa' function genKey(){
[ -e "$key" ] || ssh-keygen -t rsa -P "" -f $key
} function connServer(){
/usr/bin/expect << EOF
spawn /usr/bin/ssh-copy-id -i ${key}.pub root@$1
expect {
"want to continue connecting (yes/no)?" {send "yes\r";exp_continue}
"s password" {send "${passwd}\r";exp_continue}
}
EOF
} function exec(){
genKey && echo -e "\033[32m[INFO]\033[0m Generate key OK!" || echo -e "\033[31m[ERROR]\033[0m Generate key Failed!"
set timeout 15
for i in $(seq 0 $((${#server[*]}-1)));do
connServer "${server[$i]}" &> /dev/null
[[ $? -eq 0 ]] && echo -e "\033[32m[INFO]\033[0m Get ${server[$i]} Success!" || echo -e "\033[32m[INFO]\033[0m Get ${server[$i]} Failed!"
done
} function clear(){
for i in $(seq 0 $((${#server[*]}-1)));do
sed -i "/${server[$i]}/d" /root/.ssh/known_hosts
done
} function help(){
echo "Usage: $0 [ exec | clear ]"
echo -e "Ansible SSH password free login configuration \n"
} function main(){
case $1 in
exec)
exec;;
clear)
clear;;
*)
help;;
esac
} main $1

2.3 其他更详细内容

expect的使用的更多相关文章

  1. expect用法

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

  2. expect基本使用方法

    参考: http://www.cnblogs.com/lzrabbit/p/4298794.html expect是linux系统中可以和子进程进行交互的一个命令,使用它可以做一些自动化工作.pyth ...

  3. expect实现自动登录

    自动登录主机(ssh) 建脚本item2login.sh,包含如下内容 #!/usr/bin/expect set timeout 30 spawn ssh -p [lindex $argv 0] [ ...

  4. 自动化运维 Expect

      Mac 下载:brew install homebrew/dupes/expect expect : ->  自动化脚本工具:  用于处理交互命令; #注意 调用时并不是使用的 /bin/b ...

  5. expect

    #!/usr/bin/expect -fset ipaddr "192.168.5.4"set passwd "123qwe"set timeout 30 sp ...

  6. expect命令问题1

    [root@localhost scripts]# cat exptest.sh #!/usr/bin/expect spawn ssh root@127.0.0.1 expect "pas ...

  7. expect脚本语言用法示例

    #!/usr/bin/expect set hostname [lindex $argv 0] set username [lindex $argv 1] set passwd [lindex $ar ...

  8. 测试框架Mocha与断言expect

    测试框架Mocha与断言expect在浏览器和Node环境都可以使用除了Mocha以外,类似的测试框架还有Jasmine.Karma.Tape等,也很值得学习. 整个项目源代码: 为什么学习测试代码? ...

  9. Linux - expect自动化远程登录脚本

    简单模式: #!/usr/bin/expect -f spawn ssh root@192.168.0.1 expect "*assword*" send "root\r ...

  10. 使用 expect 命令执行自动分发系统

    一.命令 except 实例详解 1. 介绍 expect 使用场景 expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令.当然若是使用不带密码的密钥验证同样可以实现自动登录和自动 ...

随机推荐

  1. 2020年下征文+没有计算机经验的宝妈也可以轻松领证一次过关啦 nice !相信努力总会收获

    2020年下征文+没有计算机经验的宝妈也可以轻松领证http://www.1634.com.cn/ruankao/forum.php?mod=viewthread&tid=5363&f ...

  2. 手写算法-python代码实现KNN

    原理解析 KNN-全称K-Nearest Neighbor,最近邻算法,可以做分类任务,也可以做回归任务,KNN是一种简单的机器学习方法,它没有传统意义上训练和学习过程,实现流程如下: 1.在训练数据 ...

  3. Python 写了一个批量生成文件夹和批量重命名的工具

    Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...

  4. Android OpenGL ES 开发

    OpenGL(Open Graphics Library) 是开放图形库,是一个跨平台的图形 API.OpenGL ES(OpenGL for Embedded System)是专为移动端提供的一个子 ...

  5. 解决CentOS 8 Docker容器无法上网的问题

    发布于:2020-11-28  Docker  2条评论  3,051 views  如需VPS代购.PHP开发.服务器运维等服务,请联系博主QQ:337003006 CentOS 8已经发行好长一段 ...

  6. 远程调用get和post请求 将返回结果转换成实体类

    package org.springblade.desk.utils; import org.apache.http.client.ResponseHandler; import org.apache ...

  7. positive-unlabeled (PU) learning

    PULearning的应用场景是,我们可以清晰地确定正样本,但是不能确定负样本,因为它有可能是正样本,只是我们还没有证明. 这时我们可以把这部分不确定的样本称为无标签样本U,加上正样本P来建立模型. ...

  8. [leetcode]罗马数字和阿拉伯数字相互转换

    罗马转阿拉伯 public int romanToInt(String s) { /* 从左到右依次根据哈希表进行加法 如果是"CM"900这种情况就要执行+M和-C处理 */ i ...

  9. JVM的艺术-对象创建与内存分配机制深度剖析

    JVM的艺术-对象创建与内存分配机制深度剖析 引言 本章将介绍jvm的对象创建与内存分配.彻底带你了解jvm的创建过程以及内存分配的原理和区域,以及包含的内容. 对象的创建 类加载的过程 固定的类加载 ...

  10. java.util.Collections

    p.p1 { margin: 0; font: 11px Monaco } span.s1 { text-decoration: underline } span.s2 { color: rgba(1 ...