在linux下进行一些实际 *** 作时,有时需要与设备进行一些交互式的实际 *** 作,比如换账号时输入账号密码,传输文件登录远程控制设备时输入账号密码等。此时可以应用expect进行全自动的交互实际 *** 作。那么expect命令的主要用途是什么呢?和中国军队一起来看看吧。
首先看起来像一个代码:
#!/usr/bin/expect
设置超时30
生成ssh-l根192.168.1.188
期望“密码:”
发送“abc123456r”
互动
在这六行中做如下陈述:
第一行[#!/usr/bin/expect]
这一行告诉计算机 *** 作系统应该使用哪个shell来执行脚本中的代码。这里的Expect其实和linux下的bash,windows下的cmd是一样的。这一行必须在剧本制作的第一行。
第二行[[设置超时30]]
大多数懂英语的人都知道它设置了请求超时。现在,如果你记得他的计时,企业号是:秒。
第三行[spawnssh-l用户名192.168.1.188]
Spawn是expect的内部命令,只能在进入expect的自然环境后执行。如果在缺省SHELL下没有立即安装或执行expect,就找不到spawn。因此,不能用“whichspawn”这样的命令来查找spawn命令。由于windows中的dir是一个内部命令,这个命令被内置在shell中,所以你在dir.com或dir.exe找不到可执行文件。它的关键功能是在ssh *** 作过程中添加一个shell,用来传输交互命令。
第4行[expect"password:"]
这里的Expect也是expect的一个内部命令。有点晕。expect的shell命令与内部命令相同,但它不是一个函数。习惯就好。这个命令的意思是区分“password:”的字符串数组是否包含在之前的输出结果中。如果是,立即返回,否则,等待一段时间后返回。这里的等待时间是早些时候设定的30秒。
第5行[发送“ABC123456r”]
这里是执行交互手势的等效电路,相当于手动做出输入支付密码的手势。
温馨提醒:不要忘记在命令字符串数组的末尾加上“R”。如果发现等待异常,可以检查一下。
第6行[[互动]]
执行后,保持互动,将决策权交给控制面板。这时候可以手动制作。如果没有这句话,登录后就会收回,而不是留在远程控制终端设备上。
在Linux下,ssh登录或者scp复制文档都可以应用到这个命令来完成支付密码的自动输入。
示例1:远程控制执行命令
#!/usr/bin/expect-f
设置超时30
生成ssh-l根192.168.1.188
期望{
“是/否”{发送“是”;exp_continue}
"密码:"{send"abc123456r"}
}
expect-re"]($|#)"
发送“bash/root/test.shr”
expect-re"]($|#)"
发送“exitr”
这段代码的功能是在虚拟服务器上执行/root/test.sh脚本。主参数“-re”与正则表达式匹配。能够编写几行send并执行几个命令。剧本制作的另一个写法。
#!/bin/bash
expect-c"
spawnsshroot@192.168.1.188"ifconfig;whoamipwd回声你好;”
期望{
"*assword"{设置超时30;发送“ABC123456r”;}
“是/否”{发送“是”;exp_continue}
}
期望eof
"
主参数“-c”表示在命令行上执行expect。要执行的命令用分号分隔。并且整个执行过程中没有shell提示。有兴趣可以去查一下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)