您的位置:首页 > 运维架构 > Linux

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

2017-05-24 18:19 381 查看
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\r";exp_continue }
"*password:"
{ send "xxxxxx\r"}
}
expect eof
EOF

if [ $? -eq 0 ]
then
echo "复制文件到$line成功!"
else
echo "复制文件到$line失败!"
fi
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: