目录
Here Document 是一个特殊用途的代码块。它在Linux Shell中使用I/O重定向的方式将命令列表提供给交互式程序或命令,比如ftp、cat、read命令。
Here Document 时标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接地生产出一个文件并用作命令地标准输入。
命令 <<标记
...
...
标记




expect是建立在tcl语言基础上的一个工具,它可以让一些需要交互的任务自动化的完成,相当于模拟了用户和命令行的交互操作。
expect 是用来进行自动化控制和测试的工具。
主要解决 shell脚本中不可交互的问题。
1.追踪(需要交互的)指定
2.捕捉提示进行交互的关键词
3.传入交互指定 回车执行
判断上次输出结果是否包含指定的字符串,如果有则立即返回,否则就等待超时时间返回
只能捕捉由spawn启动的进程的输出
用于接收命令执行后的输出,然后和期望的字符串匹配
向进程发送字符串,用于模拟用户的输入
该命令不能自动换行,一般要加\r(回车)或者\n
方式一:expect "密码" {send "abc123\r"} #同一行send部分要有{}
- 方式二:
- expect "密码"
- send "abc123\r" #换行send部分不需要有{}
- 方式三:
- expect支持多个分支
-
- expect #只要匹配了其中一个情况,执行相应的send语句后退出该expect语句
- {
- "密码1"{ send "abc123\r"}
- "密码2"{ send "1234561r"}
- "密码3"{ send "1231231r"}
- }
启动进程,并跟踪后续交互信息
expect eof (等待执行结束)
interact (执行完成后保持交互状态,把控制权交给控制台)
设置超时时间,过期则继续执行后续指令
默认,timeout事10s
例:set timeout 30
允许expect继续向下执行指令
下例将判断交互输出中是否存在yes/no或password。如果匹配yes/no则输出 yes并再次执行判断;如果匹配password则输出abc123 并结束该段expect 语句。
- expect {
- "(yes/no)"{ send "yeslr" : exp_continue; }
- "*password" {set timeout” 300; send "abci23\r";}
回显命令,相当于echo
expect脚本可以接受从bash命令行传递的参数,使用[lindex $argv n]获得。其中n从0开始,分别表示第一个,第二个,第三个…参数.
例:
- set hostname [lindex $argv 0]
- 相当于hostname=$1
- set password [lindex $argv 1]
- 相当于password=$2
使用免交互创建用户,免交互修改密码

