当前位置: 首页 > news >正文

shell脚本——expect脚本免交互

目录

一.Here Document

1.1.定义

1.2.多行重定向 

二.expect实现免交互

2.1.基础免交互改密码

2.2.expect定义

2.3.expect基本命令

2.4.expect实现免交互ssh主机


一.Here Document

1.1.定义

使用I/O重定向的方式将命令列表提供给交互式程序,是标准输 入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地 生产出一个文件并用作命令的标准输入,Here Document 可以与非交互式程序和命令一起使用

1.2.多行重定向 

格式:命令<< 开始标记符(通常为EOF)

           输入内容

           ...

           结束标记符(与开始标记符一样,前后不得有任何内容,包括空格)

例子: cat <<EOF   >ll.txt

                >123

                >abc

                >EOF

补充:命令tee等于多行重定向 : <<EOF

                使用方法:tee  [选项]   文件名

                [选项]:  -a       内容追加到给定的文件而非覆盖

举例:tee  ll.txt1  #输入内容11  #按回车会打印一次2  #输入内容22  #按回车会打印一次ctrl +c 结束cat  ll.txt内容为:12

二.expect实现免交互

2.1.基础免交互改密码

        (1)echo '1234abcd' |passwd   --stdin lgd  #将1234abcd通过标准输入传给passwd命令,改lgd用户密码

        (2)passwd lgd <<EOF       #passwd多行重定向输入密码给李狗蛋

           1234abcd

           1234abcd

            EOF

2.2.expect定义

建立在tcl(tool command language)语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题,使用前需要安装(yum install  -y expect)。

2.3.expect基本命令

①脚本解释器:expect 脚本中首先引入文件,表明使用的是哪一种shell。expect的为:/usr/bin/expect

②spawn命令:用于捕捉关键词,后面常跟一个linux执行命令。

③expect命令:用于判断上层捕捉输出的结果是否有指定字符,有则立即返回,没有则默认等待10s。

④exp_continue命令:expect多分支判断时使用。注意:使用exp_continue时,如果跟踪像passwd这样输入密码后就结束进程的命令,expect {}外不要加上expect eof 因为spawn进程结束后悔默认向expect 发送eof,会导致后面的expect eof执行报错。

⑤send命令:expect命令判断完成需要返回时,发送需要交互的指令,想要传递给电脑的文字或字符,该命令不能自动回车换行,\n和\r是回车。

⑥set命令:可用于设置变量、设置expect超时时间,默认是10s。

⑦set设置位置变量:set password  [lindex $argv 0] ,设置时从0开始,执行脚本时在脚本后跟参数即可。

⑧结束符:(1) expect eof 结束并返回原来环境,原来主机。

                  (2) interact 结束但是不会返回原来的地方,保持当前状态,当前主机。

                (3)expect eof 与 interact 只能二选一。

2.4.expect实现免交互ssh主机

#!/usr/bin/expect
spawn ssh 192.168.47.3   # ssh 远程登陆,使用spawn执行
expect {"yes/no" { send "yes\n";exp_continue }    # 捕捉yes/no,然后发送yes,\n起到回车的作用"password" { send  "123123\n" }    # 继续捕捉password,然后发送magedu,\n起到回车的作用
}       
interact    # 结束符,结束后不返回原用户,停留在远程用户端上

注意:没有安装expect软件包无法使用expect脚本解释器

yum -y install expect

http://www.lryc.cn/news/134861.html

相关文章:

  • ubuntu18.04安装远程控制软件ToDest方法,针对官网指令报错情况
  • 系统架构设计师之缓存技术:Redis持久化的两种方式-RDB和AOF
  • 以创新点亮前路,戴尔科技开辟数实融合新格局
  • 使用Pandas处理Excel文件
  • 设计模式——接口隔离原则
  • 黑客(网络安全)自学
  • 《Go 语言第一课》课程学习笔记(三)
  • PSP - 基于开源框架 OpenFold Multimer 蛋白质复合物的结构预测与BugFix
  • Java课题笔记~ MyBatis分页查询插件
  • (嵌入式c语言)类型修饰符
  • 1、Spring底层核心原理解析
  • 迷路的机器人(递归回溯+动态规划两个方法实现)
  • Nacos
  • 【Linux】网络层协议:IP
  • 神经网络为什么可以学习
  • Docker基础入门:镜像、容器导入导出与私有仓库搭建
  • Go语言入门指南:基础语法和常用特性解析(上)
  • 排序算法合集
  • Vue2-全局事件总线、消息的订阅与发布、TodoList的编辑功能、$nextTick、动画与过渡
  • DP读书:鲲鹏处理器 架构与编程(八)3.1鲲鹏处理器片上系统与Taishan处理器内核架构
  • 如何使用 HOOPS Exchange SDK 和 Polygonica Bridge
  • spring异步框架使用教程
  • 【数学建模】清风数模正课3 插值算法
  • 什么是eval()?eval是用来干什么的?
  • JavaScript-console:JavaScript控制台(Console)常用方法
  • Nginx配置前后端分离
  • rabbitmq的发布确认
  • RISC-V公测平台发布· CoreMark测试报告
  • 模型微调(fine-tune)
  • 云农场种植:互联网+智慧牧场,为农业注入新的活力和创新