Shel编程之免交互5
文章目录
- Shell编程之免交互
- 一、概览
- 1、Here Document概述
- 2、Here Document使用注意事项
- 3、Expect概述
- 4、基本命令
- 二、实验案例
- 案例1:创建用户并设置密码
- 案例2:实现SSH自动登录
- 案例3:利用expect完成FTP登录过程
Shell编程之免交互
一、概览
1、Here Document概述
- 使用I/O重定向的方式将命令列表提供给交互式程序
- 标准输入的一种替代品
- 语法格式
命令 <<标记
…
…
标记
2、Here Document使用注意事项
- 标记可以使用任意合法字符
- 结尾的标记一-定要顶格写,前面不能有任何字符
- 结尾的标记后面也不能有任何字符(包括空格)
- 开头标记前后的空格会被省略掉
3、Expect概述
- 建立在tcl之.上的一个工具
- 用于进行自动化控制和测试
- 解决shel脚本中交互相关的问题
4、基本命令
1、expect
- 判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
- 只能捕捉由spawn启动的进程的输出
- 用于接收命令执行后的输出,然后和期望的字符串匹配
2、send
- 向进程发送字符串,用于模拟用户的输入
- 该命令不能自动回车换行,- -般要加\r (回车)
3、spawn
- 启动进程,并跟踪后续交互信息
4、结束符
- expect eof—等待执行结束
- interact—执行完成后保持交互状态,把控制权交给控制台
5、set
- 设置超时时间,过期则继续执行后续指令
- 单位是秒
- timeout -1表示永不超时
- 默认情况下,timeout是10秒
6、exp_ continue
- 允许expect继续向下执行指令
7、send_ user
- 回显命令,相当于echo
8、接收参数
- Expect脚本可以接受从bash传递的参数
- 可以使用[lindex $argv n]获得
- n从0开始,分别表示第一个,第二个 ,第三个…参数
二、实验案例
案例1:创建用户并设置密码
- 正常情况下的交互过程
- 编写Shell脚本(嵌入方式)
#!/bin/bash
user=$1
password=$2
useradd $user
#expect嵌入
expect <<EOF
spawn passwd $user
expect "New password:"
send "${password}\r"
expect "Retype new password:"
send "${password}\r"
expect eof;
EOF
案例2:实现SSH自动登录
- 首次登录
- 正常登录
- 连接被拒绝,可能是ssh没开,或者端口不对,或者防火墙限制
- 没有连接地址
方案1
#!/usr/bin/expect
set timeout -1
set hostname [lindex $argv 0]
set password [lindex $argv 1]
spawn ssh root@${hostname}
expect {"Connection refused" exit"Name or service not known" exit"to continue" {send "yes\r";exp_continue}"password:" {send "${password}\r";}
}
expect "*]#"
send "exit\r"
expect eof
方案2
#!/bin/bash
hostname=$1
password=$2
/usr/bin/expect <<-EOF
set timeout -1
spawn ssh root@${hostname}
expect {"Connection refused" exit"Name or service not known" exit"to continue" {send "yes\r";exp_continue} "password:" {send "${password}\r";}
}
expect "*]#"
send "exit\r"
expect eof
EOF
案例3:利用expect完成FTP登录过程
#!/usr/bin/expect
set timeout -1
set hostname [lindex $argv 0]
spawn ftp ${hostname}
expect {"root):" {send "ftp\r";exp_continue}"Password:*" {send "\r";exp_continue}
}
expect "ftp>*"
interact
expect eof
Shel编程之免交互5相关推荐
- Expect 自动化控制和测试 Here Document 免交互 Linux- shell编程之免交互
shell编程之免交互 一.免交互 ① Here Document 免交互 ② 语法格式 ③ 注意事项 ④ 支持变量替换 二.Expect ① 基本命令 ② expect直接执行,需要使用expect ...
- Shell编程之免交互(Here Document、Expect(直接与嵌入执行))
Shell编程之免交互(Here Document.Expect)(直接与嵌入执行) 一:Here Document 1.1:Here Document概述 1.2:Here Document使用注意 ...
- Shell编程之免交互
目录 一. Here Document免交互 1. 免交互定义 2. 语法格式 3. 应用示例 3.1 示例1 3.2 示例2 3.2 示例3 4. Here Document 变量设定 4.1 示例 ...
- Shell 之 免交互编程(expect用法)
目录 一.expect 1.安装环境 2.基本命令 1.脚本解释器 2.spawn(跟踪) 3.expect (捕捉) 4.send (发送) 5.结束符 6.set 7.exp_continue 8 ...
- linux免交互登陆远程主机并执行命令(密钥对和Expect)
Linux下实现免交互登陆一般有两种: 1. SSH无密码认证方式 客户端使用ssh-keygen生成密钥对,将公钥复制到服务端(authorized_keys),SSH提供公钥登陆,当SSH访问服务 ...
- Shell批量SSH免交互登录认证
脚本实现功能:批量或单个SSH免交互登录认证 脚本应用场景:当部署集群时,大多数实现要配置好管理节点与从节点的SSH免交互登录,针对这样的情况,写了下面脚本,简化工作. 脚本支持系统:Ubuntu和C ...
- 【拔刀吧少年】之Expect 自动化控制和测试 Here Document 免交互
免交互 一.Here Document免交互 1.1 概述 1.2 语法格式 1.3 简单案例 1.4 支持变量替换 1.5 多行注释 1.6 完成自动划分磁盘免交互 二.Expect进行免交互 2. ...
- Here Document和Expect概述(免交互,变量设定,控制,注释,)(shell里使用EOF报错)
文章目录 Here Document概述 Here Document使用注意事项 Here Document免交互 Here Document变量设定 Here Document格式控制 Here D ...
- Shell Here Document 免交互命令和Expect
Shell Here Document 免交互命令和Expect 一.Here Document 免交互命令 二.Expect 1.基本命令 2.示例 3.嵌入执行模式 4.实现ssh自动登录 5.免 ...
- shell脚本详解(十二)——Here Document免交互及Expect自动化交互
shell脚本详解(十二)--Here Document免交互及Expect自动化交互 一.Here Document 免交互 1.格式 2.注意事项 3.免交互方式实现对行数的统计,将要统计的内容置 ...
最新文章
- windows部署微服务jar包 yml_杰克布开源项目,低代码开发框架,Docker快速部署
- 并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...
- 边缘计算工作负载:虚拟机,容器还是裸机?
- 如何使用fiddler工具抓包?
- C. Spell Checker
- access用姓名字段统计人数_access题库61-66(1)
- 昨天见到了原来飘渺水云间(浙江大学BBS站)的FLASH版主小兵甲
- 解决能上QQ却不能上网的问题
- sudo报错:no valid sudoers sources found, quitting
- 安卓手机上最好的3个epub阅读器
- 云函数+微信公众号到个人微信
- mysql统计每半小时内的数据(查寻某段时间内的数据)
- STM32通信:IIC (二)
- 打印标签时如何解决打印偏移
- Buildroot 制作根文件系统
- 【Docker】二 Docker安装
- keil c语言 位运算,c51按位运算符
- 最全RocketMQ学习资料
- Docker Harbor
- John B. Conway《Functions of One Complex Variable Ⅱ》(约翰·B·康威《单复变函数Ⅱ》)中文目录
热门文章
- A计划 骑士救公主迷宫
- python登录系统账号检测_使用Python脚本检测邮件账户密码是否被泄漏,提高你的账户安全性...
- css制作 平行四边形和梯形导航条
- 一名小程序员的2021年度 个人总结
- iOS日历攻略:提醒调休并过滤法定节假日
- 什么是md5码,md5码有什么用?
- SQL server 期末复习
- Promise的含义和用法
- Pytorch torch.add() torch.add_() 用法
- 深信服AC1000路由部署模式怎么配置线路负载均衡