百度建站云南服务中心,公司展示网站制作,专业的家居行业网站制作,高端的饰品行业网站开发Here Document 概述
常用的交互程序#xff1a;read#xff0c;ftp#xff0c;passwd#xff0c;su#xff0c;sudo
cat也可配合免交互的方式重定向输出到文件
Here Document 的作用
使用I/O重定向的方式将命令列表提供给交互式程序标准输入的一种替代品
格式
命令 …Here Document 概述
常用的交互程序readftppasswdsusudo
cat也可配合免交互的方式重定向输出到文件
Here Document 的作用
使用I/O重定向的方式将命令列表提供给交互式程序标准输入的一种替代品
格式
命令 标记输入内容标记
Here Document使用注意事项
标记可以使用任意合法字符结尾的标记一定要顶格写前面不能有任何字符结尾的标记后面也不能有任何字符包括空格)开头标记前后的空格会被省略掉
Here Document操作
read命令 只能打印第一行内容 统计行数 免交互修改密码 查看内容 tee 实现标准输入与输出 Here Document变量设定
Here Document 也支持使用变量如果标记之间有变量被使用会先替换变量值。如果想要将一些内容写入文件除了常规的方法外也可以使用 Here Document。如果写入的内容中包含变量在写入文件时要先将变量替换成实际值在结合 cat 命令完成写入
涉及到换行时输出变量要加双引号
如果涉及到换行输出变量时要加双引号不然会显示在同一行 输入的内容不进行变量的替换
如果希望输入的内容不进行变量的替换将开始标记加上单引号 多行注释使用冒号为开头的Here Document是多行注释。输入的内容不会被执行。一般直接使用#进行注释 Expect
Expect是建立在 tcl 语言基础上的一个工具常被用于进行自动化控制和测试解决shell脚本中交互相关的问题
需要安装两个软件包expecttcl
建立在 tcl 语言基础上的一个工具常被用于进行自动化控制和测试解决 shell 脚本中交互相关的问题
Expect基本命令
1.脚本解释器
expect 脚本中首先引入文件表明使用的是哪一个 shell#!/usr/bin/expect
2. spawn 启动进程并捕捉交互信息
spawn 后面通常跟一个 Linux 执行命令表示开启一个会话、启动进程并跟踪后续交互信息。例如spawn passwd root
3. expect 从进程接收字符串
判断上次输出结果中是否包含指定的字符串如果有则立即返回否则就等待超时时间后返回只能捕捉由 spawn 启动的进程的输出用于接收命令执行后的输出然后和期望的字符串匹配。
4. send 用于向进程发送字符串 向进程发送字符串用于模拟用户的输入; 该命令不能自动回车换行一般要加\r (回车)或者\n 方式一 expect 密码 {send abc123\r} #同一行 send 部分要有{} 方式二 expect 密码 send abc123\r #换行send部分不需要有{} 方式三 expect支持多个分支 expect #只要匹配了其中一个情况执行相应的send语句后退出该 expect 语句 { 密码1 {send abc123\r} 密码2 {send 123456\r} 密码3 {send 123123\r}}
5. 结束符expect eof 和 interact只能二选一
expect eof
表示交互结束等待执行结束退回到原用户与spawn对应。比如切换到root用户expect脚本默认的是等待10s当执行完命令后默认停留10s后自动切回了原用户
interact
执行完后保持交互状态把控制权交给控制台会停留在目标终端而不会退回到原终端这个时候就可以手工操作了interact后的命令不起作用;例如interact后添加exit并不会退出root用户。而如果没有interact则登录完成后会退出而不是留在远程终端上。使用interact会保持在终端而不会退回到原终端例如切换到root用户会一直在root用户状态下比如ssh到另外一台服务器会一直在目标服务器终端而不会切换到原来服务器
注意expect eof 与interact只能二选一
6. set 设置会话超时时间
expect 默认的超时时间是10秒通过set 命令可以设置会话超时时间若不限制超时时间则应设置为-1
例如 set time out 30
7. exp_continue
exp_continue 附加于某个 expect 判断项之后可以使该项被匹配后还能继续匹配该 expect 判断语句内的其他项。exp_continue 类似于控制语句中的 continue 语句。表示允许 expect 继续向下执行指令。并行执行exp_continue 前面的匹配如果有就执行没有就不执行但后面的一定会执行。
注意使用exp_continue时如果跟踪像 passwd 这样的输入密码后就结束进程的命令expect{}外不要再加上expect eof 因为spawn进程结束后会默认向expect发送eof会导致后面的expect eof 执行报错
8. send_users
表示回显命令相当于echo
9. 接收参数
expect 脚本可以接受从bash命令行传递参数使用 [lindex $argv n]获得。其中你从0开始分别表示第一个第二个第三个.....参数
passwd 修改用户密码