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. [OI笔记]每周刷题记录

    一些题库: bzoj.uoj.luogu(洛谷).CF.loj.hdu.poj.51nod 下面是一些近期的做题记录 省选爆炸-然后大概就先这样了,要回去读一段时间文化课,如果文化课还不错的话也许还会 ...

  2. 持久层之 MyBatis: 第三篇 :缓存 And 高级查询

    MyBatis入门到精通3 缓存机制 Mybatis一级缓存测试 Mybatis二级缓存测试 高级查询 表关系说明 一对一查询 一对多查询 多对多查询 缓存机制 正如大多数持久层框架一样,MyBati ...

  3. 百度实习生,以修仙者的角度聊聊怎么学MySQL,不来看看你的修为如何吗?

    目录 因为我个人比较喜欢看修仙类的小说,所以本文的主体部分借用修仙者的修为等级,将学习旅程划分成:练气.筑基.结丹.元婴.化神.飞升六个段位,你可以看下你大概在哪个段位上哦! 本文目录: 我为什么要写 ...

  4. iNeuOS工业互联平台,图表与数据点组合成新组件,进行项目复用

    目       录 1.      概述... 1 2.      演示信息... 2 3.      应用过程... 2 1.   概述 针对有些行业的数据已经形成了标准化的建模或者有些公司专注于某 ...

  5. Containerd 的前世今生和保姆级入门教程

    原文链接:https://fuckcloudnative.io/posts/getting-started-with-containerd/ 1. Containerd 的前世今生 很久以前,Dock ...

  6. NET 5使用gRPC

    gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. https://grpc.io/docs/guides/ https://github.com/grpc/grpc-dotnet h ...

  7. H3C路由器配置——动态路由OSPF协议

    一.介绍 1.OSPF协议介绍 (1).OSPF(Open Shortest Path First,开放最短路径优先)路由协议是用于网际协议(IP)网络的链路状态路由协议.是一个被各厂商设备广泛支持的 ...

  8. Double 值比较大小 Long值比较大小

    BigDecimal outValue = new BigDecimal(sapVerifyInventory.getQuantity()); BigDecimal inValue = new Big ...

  9. java零基础之---常见java面试题

    看到别人分享的面试题,感觉蛮全面的,分享出来,慢慢研究答案. 一.Java 基础 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode() ...

  10. HTML学习案例-仿慕课网网页制作(一)

    概述:仿制慕课网头部导航栏和分支导航栏的外观 考察知识点: 1.消除浮动的原因:如果最上面的块级元素不清楚浮动的话就会影响下面的块级元素的布局 对subnav块使用了float,结果subnav块飞到 ...