yum install -y expect

1、expect基本命令了解

spawn 交互程序开始后面跟命令或者指定程序

expect 获取匹配信息匹配成功则执行expect后面的程序动作

send exp_send 用于发送指定的字符串信息

exp_continue 在expect中多次匹配就需要用到

send_user 用来打印输出 相当于shell中的echo

exit 退出expect脚本

eof expect执行结束 退出

set 定义变量

puts 输出变量

set timeout 设置超时时间

标题2、expect+Scp免密推送文件

spawn scp 文件名 root@IP:路径

set timeout -1 值为-1表示永不超时

// spawn scp各种转换都不行,不加*,只能拷贝当前目录下的文件,该目录下面的文件夹就不能拷贝过去。改成如下的代码就可以正常执行了。

//需要注意的是 expect 无法识别 shell 的语法,所以如果用了复杂的 shell 命令,会报如下错误 xxx : no such file or directory。如果想要 expect 执行复杂的 shell 命令,可以这么做 spawn bash -c {your shell commands}。

cat /opt/shell/expect_scp.sh #!/bin/bash expect << EOF set timeout -1 spawn bash -c “scp -pr /home/* root@10.168.1.202:/home/” expect { “yes/no” {send “yes\r”;exp_continue} “password” {send “123456\r”;} } expect eof exit EOF

==============================================

标题3、利用shell和expect结合实现后台scp大文件

//脚本可以正常运行,但是每次都传了18M就自动停止了。后来了解到,expect有默认的命令运行时限,超时后会自动停止运行,解决方法是加入set timeout 28800(超时时间为8小时),所以完整脚本如下: cat /opt/shell/expect_scp.sh #!/bin/bash expect << EOF set timeout 28800 spawn bash -c “scp -pr /home/* root@10.168.1.202:/home/” expect { “yes/no” {send “yes\r”;exp_continue} “password” {send “123456\r”;} } expect eof exit EOF

好文阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。