No.1 expect的安装

[root@qfedu ~] yum -y install expect

No.2 expect的语法-------通过expect可以实现将交互式的命令变为非交互式执行,不需要人为干预(手动输入)

是一个免费的编程工具, 用来实现自动的交互式任务, 而无需人为干预. 说白了 expect 就是一套用来实现自动交互功能的软件

在实际工作中我们运行命令、脚本或程序时, 都需要从终端输入某些继续运行的指令,而这些输 入都需要人为的手工进行. 而利用 expect 则可以根据程序的提示, 模拟标准输入提供给程序, 从而实现自动化交互执 行. 这就是 expect

如果能够在工作中熟练的使用Shell脚本就可以很大程度的提高工作效率, 那么再搭配上expect这个时候很多工作都可以实现自动化进行。

 用法: 1)定义expect脚本执行的shell#!/usr/bin/expect     -----类似于#!/bin/bash 2)set timeout 30设置超时时间30s 3)spawnspawn是执行expect之后后执行的内部命令开启一个会话 #功能:用来执行shell的交互命令4)expect ---相当于捕捉功能:判断输出结果是否包含某项字符串(相当于捕捉返回的结果),没有则会断开,否则等待一段时间后返回,等待通过timeout设置 5)send执行交互动作,将交互要执行的命令进行发送给交互指令,命令字符串结尾要加上“\r”,#---相当于回车6)interract 执行完后保持交互状态,需要等待手动退出交互状态,如果不加这一项,交互完成会自动退出7)exp_continue 继续执行接下来的操作

实战非交互式ssh连接:

案例1:普通操作
[root@qfedu script]# vim expect01.sh
#!/usr/bin/expect
spawn ssh root@192.168.246.115expect {"yes/no" {  send "yes\r"; exp_continue }"password:" { send "1\r" };
}
interact
[root@qfedu script]# chmod +x expect01.sh
[root@qfedu script]# ./expect01.sh
spawn ssh root@192.168.246.115
root@192.168.246.115's password:
Last login: Fri Aug 28 16:57:09 2019#如果添加interact参数将会等待我们手动交互进行退出。如果不加interact参数在登录成功之后会立刻退出。
============================================================================
2.设置变量与进行传参的方式
#注意:expect环境中设置变量用set,识别不了bash方式定义的变量 [root@qfedu script]# vim expect01.sh
#!/usr/bin/expect
set user root
set pass 1
set ip [ lindex $argv 0 ]  #expect固定写法,从0开始,第一个位置参数,相当于shell中的$1
set timeout 10spawn ssh $user@$ip
expect {"yes/no" {  send "yes\r"; exp_continue }"password:" { send "$pass\r" };
}
interact[root@qfedu script]# ./expect01.sh 192.168.246.115
spawn ssh root@192.168.246.115
root@192.168.246.115's password:
Last login: Fri Aug 28 07:13:57 2019 from 192.168.246.135#如果想登录成功自动结束交互模式也就是expect,可以采用下面方式:
expect "#"
send "useradd test\r"
send "pwd\r"
send "exit\r"
expect eof  #直接退出expect模式
============================================================================
3.进行批量推送公钥实现免密连接,ping通一个ip地址连接一个ip------!!!!扩展
[root@qfedu script]# vim getip_push.sh
#!/usr/bin/bash
pass=1
#判断expect命令是否安装
rpm -qa expect &> /dev/null
if [ $? -ne 0 ];thenyum install -y expect
fi#判断主机下面是否生成秘钥,如果没有生成秘钥
if [ ! -f ~/.ssh/id_rsa ];thenssh-keygen -P "" -f ~/.ssh/id_rsa
fi#循环执行获取up状态的ip地址。
for i in {2..254}
do{ip=192.168.198.$iping -c1 $ip &> /dev/nullif [ $? -eq 0 ];thenecho "$ip" >> up_ip.txtset timeout 10/usr/bin/expect <<-EOF   #shell脚本中调用expect命令spawn ssh-copy-id $ipexpect {"yes/no" { send "yes\r"; exp_continue }"password:" { send "$pass\r" };}expect eofEOFfi      } &
wait
done
echo "finish..."[root@qfedu script]# chmod +x getip_push.sh
[root@qfedu script]# ./getip_push.sh测试....

shell 编程-Expect相关推荐

  1. shell编程expect用法

    shell脚本需要交互的地方可以使用here文档是实现,但是有些命令却需要用户手动去就交互如passwd.scp 对自动部署免去用户交互很痛苦,expect能很好的解决这类问题. expect的核心是 ...

  2. shell中spawn什么意思_shell 编程-Expect

    原标题:shell 编程-Expect No.1 expect的安装 [root@qfedu ~] yum -y install expect No.2 expect的语法-------通过expec ...

  3. Linux高级专题详解--shell编程大全(shell变量,if语句,case语句,for循环,while循环,函数调用,数组,正则表达式,shell脚本三剑客--grep,sed,awk家族)

    shell编程 初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语.英语 计算机语言:c语言.c++.(java php py ...

  4. Shell编程之免交互(Here Document、Expect(直接与嵌入执行))

    Shell编程之免交互(Here Document.Expect)(直接与嵌入执行) 一:Here Document 1.1:Here Document概述 1.2:Here Document使用注意 ...

  5. shell编程【分发系统】

    shell编程[分发系统] 原文地址:http://www.apelearn.com/bbs/thread-8113-1-1.html 第一部分:expect讲解 expect可以让我们实现自动登录远 ...

  6. 【拔刀吧少年】之shell编程规范与变量

    shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官"(`又称命令的组合`) 二.用 ...

  7. shell编程之随机数和嵌套循环

    shell编程之随机数和嵌套循环 文章目录 shell编程之随机数和嵌套循环 一.随机数 1. 如何生成随机数? 2. 实战案例 二.嵌套循环 三.expect 一.随机数 关键词:一切都是未知数,永 ...

  8. shell脚本详解(一)——Shell编程规范与变量

    详解Shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官" 二.用户的登录shell ...

  9. Shell脚本——Shell编程规范及变量

    Shell编程规范及变量 一.Shell脚本概述 1.1.1 Shell基本概念 1.1.2 Shell脚本应用场景 1.1.3 Shell作用--翻译官 二.shell编程规范 2.1 用户登录sh ...

最新文章

  1. 滴滴开源支撑业务代码重构工具Rdebug
  2. UNIX环境编程学习笔记(11)——文件I/O之文件时间以及 utime 函数
  3. openwrt 需要高级浏览器_OpenWrt的新(shi)奇(yong)玩法
  4. 英文名字的取法 分享
  5. mysql 客户服务号获取_《MySQL排错指南》——1.4 获取查询信息-阿里云开发者社区...
  6. Android之看起来像奔溃了但是没有发现奔溃日志
  7. 设计模式学习笔记——观察者(Observer)模式
  8. 计算机网络在物流领域的应用研究,计算机网络技术在物流经济领域中的应用特点及其作用.doc...
  9. Python简明教程--String
  10. 微信小程序在线预览PDF格式文件
  11. 老电脑 xp 和深度linux的哪个更快,深度系统和雨林木风xp系统哪个好
  12. TeamTalk消息协议
  13. VMware安装Windows XP虚拟机并手动安装外加驱动程序
  14. 树莓派笔记8:UDP传输视频帧
  15. win10 校验sha256
  16. 实现从一个按钮跳转到另一个页面
  17. linux端口占满,Linux查看端口占用情况,并强制释放占用的端口
  18. 关于二代测序中duplication产生和占比问题的探讨
  19. openwrt php 编译环境,openwrt基础编译教程
  20. android实现高德地图集成

热门文章

  1. 魅族16s Pro细节曝光:骁龙855plus 未上Flyme 8
  2. 又烧一辆!蔚来ES8车库夜里起火 两个半小时才熄灭:现场惨烈
  3. 无理由退房退机票,做携程超级会员就是这么任性
  4. 今日头条官方辟谣:水滴筹从未收取过手续费
  5. iQOO骑士黑版本四月亮相:搭载骁龙855+12G运存
  6. java bigram_Java BiGramDictionary.getBiFrequency方法代碼示例
  7. vue修改config后怎么生效_梦幻西游 金银锦盒修改后资金怎么攥 可以考虑跑商
  8. oracle存储过程如何传递一个bean对象_java程序员如何在短期内抓住面试重点,成为大厂offer收割机...
  9. GLSurfaceView源码分析以及简单使用
  10. python 自定义数据类型_【整理合集,建议收藏】Python数据类型(一)