Shll编程之期望免交互
1.预计概述
2.预计安装(底层语言Tcl)
3.预计基本命令
4.预计执行方式
5.预计案例
期待概述:
1.预计是建立在tcl语言基础上的一个工具,预计是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规模的linux运维很有帮助。
2。在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会余姚输入是/否密码等信息。为了模拟这种输入,可以使用期望脚本。
希望安装
1。挂载光盘
2。制作本地百胜源
执行安装命令:yum - y安装预计
基本命令:
<编辑> 1.发送:向进程发送字符串,用于模拟用户的输入编辑>该命令不能自动回车换行,一般要加\ r(回车)
<编辑> 2.预计编辑>期待的一个内部命令判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
只能捕捉由产卵启动的进程的输出
# # # # # 3.产卵:启动进程,并跟踪后续交互信息
<编辑> 4.互动:执行完成后保持交互状态,把控制权交给控制台编辑> <编辑> 5.超时:指定超时时间,过期则继续执行后续指令编辑>单位是:秒
超时1为永不超时
默认情况下,超时时间是10秒
<编辑> 6. exp_continue 编辑>允许希望继续向下执行指令
<编辑> 7. send_user: 编辑>回显命令,相当于回波
<编辑> 8。$ argv参数数组:编辑>期待脚本可以接受从bash传递的参数,可以使用lindex $ argv [n]获得,n从0开始,分别表示第一个,第二个,第三个....参数
<编辑> 9。希望脚本必须以交互或期望ecof结束,执行自动化任务通常期望eof就够了编辑>期待eof实在等待结束标志。由产卵启动的命令在结束时会产生一个eof标记,期望eof即在等待这个标记
期待执行方式:
直接执行
<代码类="语言java "> [root@ce ~] # a.sh # !/usr/bin/expect//预计二进制文件的路径 设置超时60//60秒等待时间 log_file测试。日志//日志文件 log_user 1//日志用户 设置主机名lindex $ argv[0]//追加参数0,统计变量,加载第1位置 设置密码lindex $ argv[1]//追加参数1,统计变量,加载第2位置 产卵ssh root@美元主机名 预计{//进行匹配 “(yes/no)” {发送“是的/r”; exp_continue}//输入是的,继续执行 “*密码”//参数2 {发送“密码\ r美元”}//交给控制台人为输入 } 交互 (root@ce ~) # chmod + x a.sh root@ce ~ #。/a.sh 代码>
Demo1:远程登录
<代码类="语言java "> [root@localhost选择]# yum安装预计- y//安装服务 # vim a.sh root@localhost选择 # !/usr/bin/期望 #超时时间 设置超时20 log_file test.log log_user 1 #参数传入 设置主机名lindex $ argv [0] 设置密码lindex $ argv [1] #追踪命令 产卵ssh root@美元主机名 #捕捉信息并且匹配,免交互执行 预计{ “(yes/no)” {发送“是的\ r”; exp_continue} “*密码” {发送" $密码\ r "} } #控制权交给控制台执行 交互 # chmod + x a.sh root@localhost选择 (root@localhost选择)#。/h 192.168.56.129 123123 产卵ssh root@192.168.56.129 主机的真实性192.168.56.129(192.168.56.129)”不能成立。 指纹ECDSA关键是SHA256: DSqXtMX4L3DIIYCai7ACEftdbCIH5n0Y5SPpGCzsjdw。 指纹ECDSA关键是MD5:14:93:39:65:27:31: a6:28:8b: 28: d1:2c: fb: 32:7b: 4 d。 你确定你要继续连接(是/否)?是的 警告:永久“192.168.56.129”(ECDSA)添加到已知的主机列表。 root@192.168.56.129的密码: 最后登录:清华2019年10月10日09:46:08 192.168.56.1//此时已远程登录对方主机 (root@localhost ~) #登出//按Ctrl + d退出远程登录 连接192.168.56.129关闭。代码>
嵌入执行:
<代码类="语言java "> [root@ce ~] # b.sh # !/bin/bash 主机名=1美元 密码=2美元/usr/bin/expect<& lt; eof 产卵ssh root@ ${主机名} 预计{ “(yes/no)” {发送“是的\ r”; exp_continue} “*密码” {发送" $密码\ r "} } 预计“* #” 发送“退出\ r” 预计eof EOF (root@ce ~) #源b.shShll编程之期望免交互