免交互:
交互:我们发出指令控制程序的运行,程序在接收到指令之后按照指令的效果做出对应的反应。
免交互:间接的,通过第三方的方式把指令传送给程序,不用直接的下达指令。
Here Document 免交互:
这是命令行格式,也可以写在脚本当中。通过I/O重定向的方式将命令列表传送给交互式程序或命令。
是标准输入的一种替代品。代替了人工的输入方式。
语法格式:
命令(linux的系统命令) <<标记
内容1
内容2
内容3
标记
注意事项:
1.标记可以是任意合法字符(一般不用特殊字符,不以数字开头,通常以EOF作为默认的标记位)
2.结尾的标记位一定要顶格写。且前面不能有任何字符,空格也不行。
3.结尾的标记后面也不能有任何字符,包括空格。
4.开头的标记前后的空格都会被省略掉
Expect实现免交互
用tcl语言写的一个工具,主要用于自动化控制和测试。解决shell脚本交互的问题。
转义符:
\n:换行
\r:回车
\t:相当于一个tab键
\b:表示退格,删除
整体变量赋值
#!/bin/bash
var="Great! I am going to school"
myvar=$(cat <<EOF
this is monday
$var
EOF
)
echo $myvar
'EOF'
在开头标记加上单引号就会关闭变量赋值。
set timeout5
set设置,timeout超时时间,expect有一个默认的超时时间10秒,设置超时时间5秒。
set也可以作为设置变量
spawn passwd dn
spwan 后面用来声名需要执行的命令,开启会话过程,并且跟踪后续的交互信息。
expect “新的 密码:“
捕获需要执行的命令
send “abc123\r”
输入指令代码
expect ”重新输入新的 密码:“
send “abc123\r”
最后一定要有结束语,结束只能写一个
expect eof
交互指令结束之后,会退回原用户,切换会之前的用户
interact
留在当前用户,不会动
嵌入执行模式,在shell当中假如expect。涉及到环境的切换的场那不建议使用徽章
实例操作一:免交互预设值修改用户密码
脚本实现