原标题:shell 编程-Expect

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)spawn

spawn是执行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.115

expect {

"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 10

spawn 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 ];then

yum install -y expect

fi

#判断主机下面是否生成秘钥,如果没有生成秘钥

if [ ! -f ~/.ssh/id_rsa ];then

ssh-keygen -P "" -f ~/.ssh/id_rsa

fi

#循环执行获取up状态的ip地址。

for i in {2..254}

do

{

ip=192.168.198.$i

ping -c1 $ip &> /dev/null

if [ $? -eq 0 ];then

echo "$ip" >> up_ip.txt

set timeout 10

/usr/bin/expect <

spawn ssh-copy-id $ip

expect {

"yes/no" { send "yes\r"; exp_continue }

"password:" { send "$pass\r" };

}

expect eof

EOF

fi

} &

wait

done

echo "finish..."

[root@qfedu script]# chmod +x getip_push.sh

[root@qfedu script]# ./getip_push.sh

责任编辑:

shell中spawn什么意思_shell 编程-Expect相关推荐

  1. shell中spawn什么意思_linux expect spawn的用法

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

  2. shell中spawn什么意思_exec 和 spawn 的区别

    参考资料: 最近在用nodejs 的child_process 模块调用系统的shell脚本,但是发现遇到一些问题 child_process.exec 方法调用shell脚本发现内容过长会抛错 Er ...

  3. shell中正则表达式详解_Shell if中的正则表达式使用详解

    由于工作需要对用户提交的数据进行验证,这是一个简单的日期正则验证实例,有需要了解的同学可参考. shell中的if语句需要做一个正则判断,查了一下语法记录之. DATEPATTERN="^[ ...

  4. shell 中scp 和 ssh密码输入 --expect (转:http://blog.sina.com.cn/s/blog_8ad7d4ca01014lft.html)

    这里必须先安装: yum install expect -y expect是一种自动交互语言,能实现在shell脚本中为scp和ssh等自动输入密码自动登录. 下面给出scp和ssh的使用示例: 1. ...

  5. shell+中sum的用法_shell高级用法

    1.if语句 1.1.回顾 在运行脚本前,我们一般先对脚本的语法进行检查,如果脚本有bug,我们再调试脚本: (1)语法检查:bash -n 脚本路径 (2)脚本调试:bash -x 脚本路径 1.2 ...

  6. shell 数组里追加数值_shell编程之数组及变量的多功能用法

    数组及变量的多功能用法 一.数组: 1.数组:存储多个元素的连续的内存空间,相当于多个变量的集合(变量:存储单个元素的内存空间). 2.数组名和索引 索引:编号从0开始,属于数值索引 bash的数组支 ...

  7. shell中竖线的作用_Shell中符号意义

    末端 (end-of-line).这个常用在 grep.sed.awk 以及 vim(vi) 当中. ${} 变量的正规表达式 bash 对 ${} 定义了不少用法.见本文后部 $*引用script ...

  8. shell+中sum的用法_Shell中函数使用

    调用函数时可以向其传递参数.在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数... #!/bin/bash funWithParam(){ echo &qu ...

  9. shell 编程-Expect

    No.1 expect的安装 [root@qfedu ~] yum -y install expect No.2 expect的语法-------通过expect可以实现将交互式的命令变为非交互式执行 ...

最新文章

  1. a++浏览器_“公司发给我的职业装太小了,我该怎么和领导说?”哈哈哈哈哈|职业装|uc|浏览器...
  2. Python学习之路基础篇--10Python基础,函数进阶
  3. 微信小程序组件化 快速实现可用模态窗
  4. laravel 服务提供者介绍和使用
  5. 《剑指offer》把数组排成最小的数
  6. activiti报错ProcessEngines.getDefaultProcessEngine()为null
  7. 【美团分享】美团大脑及其在推荐系统中的应用.pdf(附下载链接)
  8. PHP面试常考内容之面向对象(2)
  9. 文本框改变之onpropertychange事件
  10. 微信公众号扫场景二维码后,出现“该公众号提供的服务出现故障,请稍后再试“
  11. 多IP服务器怎么样?多IP服务器有什么优势?
  12. 记录第一次出差的经历
  13. 英语基础语法(十二)-虚拟语气
  14. 分布式系统二、MogileFS
  15. ZAO换脸App被微信屏蔽,授权APP请谨慎
  16. kafka查看topic列表和topic消息
  17. (超级详细)状态路由协议实验-OSPF(最短路径优先)实验
  18. 互联开发(TTSDemo)
  19. 课程设计—C++实现高斯消元法求解线性方程组Ax=b(附源码)
  20. 使用adb进行apk提取,判断的简单方法

热门文章

  1. HTML电气规范表格不显示,电气控制柜的布线工艺要求和常见问题
  2. 『论文阅读笔记』目标检测模型中的性能评价方式-IOU、precision/recall、mAP、PR、Fps!
  3. RJM8L151在烟雾报警器系统中的应用
  4. 【数据结构-栈】栈的基本操作
  5. msyql 赋予权限和撤销权限
  6. echarts实现地图【河南】
  7. 迅捷pdf转换成ppt转换器使用介绍
  8. signature=e55c5074cb656f0e3d5cfb5e611e9be0,VB AES 字符串和文件加密
  9. Airbnb数据分析(数据来源:kaggle)
  10. 华为鸿蒙os尝鲜,华为鸿蒙OS 尝鲜