文章目录

  • 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相关推荐

  1. Expect 自动化控制和测试 Here Document 免交互 Linux- shell编程之免交互

    shell编程之免交互 一.免交互 ① Here Document 免交互 ② 语法格式 ③ 注意事项 ④ 支持变量替换 二.Expect ① 基本命令 ② expect直接执行,需要使用expect ...

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

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

  3. Shell编程之免交互

    目录 一. Here Document免交互 1. 免交互定义 2. 语法格式 3. 应用示例 3.1 示例1 3.2 示例2 3.2 示例3 4. Here Document 变量设定 4.1 示例 ...

  4. Shell 之 免交互编程(expect用法)

    目录 一.expect 1.安装环境 2.基本命令 1.脚本解释器 2.spawn(跟踪) 3.expect (捕捉) 4.send (发送) 5.结束符 6.set 7.exp_continue 8 ...

  5. linux免交互登陆远程主机并执行命令(密钥对和Expect)

    Linux下实现免交互登陆一般有两种: 1. SSH无密码认证方式 客户端使用ssh-keygen生成密钥对,将公钥复制到服务端(authorized_keys),SSH提供公钥登陆,当SSH访问服务 ...

  6. Shell批量SSH免交互登录认证

    脚本实现功能:批量或单个SSH免交互登录认证 脚本应用场景:当部署集群时,大多数实现要配置好管理节点与从节点的SSH免交互登录,针对这样的情况,写了下面脚本,简化工作. 脚本支持系统:Ubuntu和C ...

  7. 【拔刀吧少年】之Expect 自动化控制和测试 Here Document 免交互

    免交互 一.Here Document免交互 1.1 概述 1.2 语法格式 1.3 简单案例 1.4 支持变量替换 1.5 多行注释 1.6 完成自动划分磁盘免交互 二.Expect进行免交互 2. ...

  8. Here Document和Expect概述(免交互,变量设定,控制,注释,)(shell里使用EOF报错)

    文章目录 Here Document概述 Here Document使用注意事项 Here Document免交互 Here Document变量设定 Here Document格式控制 Here D ...

  9. Shell Here Document 免交互命令和Expect

    Shell Here Document 免交互命令和Expect 一.Here Document 免交互命令 二.Expect 1.基本命令 2.示例 3.嵌入执行模式 4.实现ssh自动登录 5.免 ...

  10. shell脚本详解(十二)——Here Document免交互及Expect自动化交互

    shell脚本详解(十二)--Here Document免交互及Expect自动化交互 一.Here Document 免交互 1.格式 2.注意事项 3.免交互方式实现对行数的统计,将要统计的内容置 ...

最新文章

  1. windows部署微服务jar包 yml_杰克布开源项目,低代码开发框架,Docker快速部署
  2. 并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...
  3. 边缘计算工作负载:虚拟机,容器还是裸机?
  4. 如何使用fiddler工具抓包?
  5. C. Spell Checker
  6. access用姓名字段统计人数_access题库61-66(1)
  7. 昨天见到了原来飘渺水云间(浙江大学BBS站)的FLASH版主小兵甲
  8. 解决能上QQ却不能上网的问题
  9. sudo报错:no valid sudoers sources found, quitting
  10. 安卓手机上最好的3个epub阅读器
  11. 云函数+微信公众号到个人微信
  12. mysql统计每半小时内的数据(查寻某段时间内的数据)
  13. STM32通信:IIC (二)
  14. 打印标签时如何解决打印偏移
  15. Buildroot 制作根文件系统
  16. 【Docker】二 Docker安装
  17. keil c语言 位运算,c51按位运算符
  18. 最全RocketMQ学习资料
  19. Docker Harbor
  20. John B. Conway《Functions of One Complex Variable Ⅱ》(约翰·B·康威《单复变函数Ⅱ》)中文目录

热门文章

  1. A计划 骑士救公主迷宫
  2. python登录系统账号检测_使用Python脚本检测邮件账户密码是否被泄漏,提高你的账户安全性...
  3. css制作 平行四边形和梯形导航条
  4. 一名小程序员的2021年度 个人总结
  5. iOS日历攻略:提醒调休并过滤法定节假日
  6. 什么是md5码,md5码有什么用?
  7. SQL server 期末复习
  8. Promise的含义和用法
  9. Pytorch torch.add() torch.add_() 用法
  10. 深信服AC1000路由部署模式怎么配置线路负载均衡