CentOS6.3上搭建expect无交互开发环境

1.背景

    在面向shell编程时对于需要交互的场合则必须通过人工来干预,而对于这种方式是违反无人职守的原则;现在expect就解决了这个问题,

Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。

    Expect是在Tcl基础上创建起来的,用来做一些linux下无法做到交互的一些命令操作,在远程管 理方面发挥很大的作用。

    spawn命令激活一个Unix程序来进行交互式的运行。 
    send命令向进程发送字符串。
    expect 命令等待进程的某些字符串。 
    expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作。

2.安装

    在安装expect之前需要先安装TCL(最早称为工具命令语言”"Tool Command Language", 但是目前已经不是这个含义,不过我们仍然称呼它为TCL)是一种 脚本语言。

    这里使用的安装包:tcl8.4.20-src.tar.gz 和 expect5.45.tar.gz

    tar  zxvf  tcl8.4.20-src.tar

    cd  tcl8.4.20

    ./configure --prefix=/usr/local/tcl --enable-shared

    make

    make install

    TCL安装完毕,下面安装expect

    tar  zxvf  expect5.45.tar.gz

    cd  expect5.45

    ./configure --prefix=/usr/local/expect

    make

    make install

    expect到此就安装结束了,expect的安装目录在/usr/local/expect;但可执行文件却不在该目录下,我们可以使用find命令来查找,如:find / -name expect

一般情况下,expect与tcl在一起的,我的存放的地方在:/usr/local/tcl/bin/expect ;如果觉得这个路径太长或者不合,可以使用软链接到你想的位子上。

3.代码验证

ScpStart()
{

    line=11.22.33.44    #IP地址
    /usr/local/bin/expect << EOF
    set time 20
    spawn scp -r /opt/upProtocol/ptcBinPacket root@$line:/opt
    expect {
        "*yes/no*"
        { send "yes ";exp_continue }
        "*password:"
        { send "xxxxxx "}
    }
    expect eof
EOF

if [ $? -eq 0 ]
then
    echo "复制文件到$line成功!"
else
    echo "复制文件到$line失败!"
fi
}

原文地址:https://www.cnblogs.com/xiehy/p/6900344.html