expect的使用
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的使用的更多相关文章
- expect用法
1. [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来执行.这里的expect其实和linux下的bash.windows下的cmd是一类东西. 注意: ...
- expect基本使用方法
参考: http://www.cnblogs.com/lzrabbit/p/4298794.html expect是linux系统中可以和子进程进行交互的一个命令,使用它可以做一些自动化工作.pyth ...
- expect实现自动登录
自动登录主机(ssh) 建脚本item2login.sh,包含如下内容 #!/usr/bin/expect set timeout 30 spawn ssh -p [lindex $argv 0] [ ...
- 自动化运维 Expect
Mac 下载:brew install homebrew/dupes/expect expect : -> 自动化脚本工具: 用于处理交互命令; #注意 调用时并不是使用的 /bin/b ...
- expect
#!/usr/bin/expect -fset ipaddr "192.168.5.4"set passwd "123qwe"set timeout 30 sp ...
- expect命令问题1
[root@localhost scripts]# cat exptest.sh #!/usr/bin/expect spawn ssh root@127.0.0.1 expect "pas ...
- expect脚本语言用法示例
#!/usr/bin/expect set hostname [lindex $argv 0] set username [lindex $argv 1] set passwd [lindex $ar ...
- 测试框架Mocha与断言expect
测试框架Mocha与断言expect在浏览器和Node环境都可以使用除了Mocha以外,类似的测试框架还有Jasmine.Karma.Tape等,也很值得学习. 整个项目源代码: 为什么学习测试代码? ...
- Linux - expect自动化远程登录脚本
简单模式: #!/usr/bin/expect -f spawn ssh root@192.168.0.1 expect "*assword*" send "root\r ...
- 使用 expect 命令执行自动分发系统
一.命令 except 实例详解 1. 介绍 expect 使用场景 expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令.当然若是使用不带密码的密钥验证同样可以实现自动登录和自动 ...
随机推荐
- js下 Day20、综合案例
一.购物车 效果图: 功能思路分析: 1. 面向对象框架 2. 模拟数据 1.多个店铺数组套对象 2.每个店铺多个商品,数组套对象
- 死磕以太坊源码分析之downloader同步
死磕以太坊源码分析之downloader同步 需要配合注释代码看:https://github.com/blockchainGuide/ 这篇文章篇幅较长,能看下去的是条汉子,建议收藏 希望读者在阅读 ...
- Core3.0类库项目引用Microsoft.AspNetCore
前言 参考 https://www.cnblogs.com/puzi0315/p/12190989.html 步骤 修改Project.Sdk 添加OutputType <Project Sdk ...
- 5. Longest Palindromic Substring最大回文子串
int sta = 0; int max = 1; public String longestPalindrome(String s) { /* 判断回文有两种: 1.最大回文子序列求长度: 用动态规 ...
- Ubuntu20.04编译ffmpeg
1.安装编译所需工具,GCC 2.安装yasm nasm yasm和nasm是两个编译器,编译ffmpeg需要用到 安装命令: sudo aptitude install yasm nasm 3.安装 ...
- springboot源码解析-管中窥豹系列之总体结构(一)
一.简介 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...
- python数据基本运算处理===循环
一.循环语句 1.while while的循环条件为True,即每次正常循环完毕都会返回判断一次条件 只有读到break才能立刻彻底结束循环,break只能结束本层循环 continue也能立即结束本 ...
- Nebula Exchange 工具 Hive 数据导入的踩坑之旅
摘要:本文由社区用户 xrfinbj 贡献,主要介绍 Exchange 工具从 Hive 数仓导入数据到 Nebula Graph 的流程及相关的注意事项. 1 背景 公司内部有使用图数据库的场景,内 ...
- 字典实现:python-----VS----java
对比python和java的字典数据结构,以下就LeetCode面试题 17.10. 主要元素为栗子,进行学习.是一道简单题目,重点看数据结构的运用与实现. 普通的思路,使用一个字典结构记录每个元素出 ...
- JavaScript DOM编程艺术(第2版)的简单总结
介绍 JavaScript DOM编程艺术(第2版)主要讲述了 JavaScript.DOM 和 HTML5 的基础知识,着重讲述了 DOM 编程,并通过几个实例演示了具有专业水准的网页开发. 下面介 ...