1、下载TCL和Expect源程序
TCL程序下载地址:
http://www.tcl.tk/software/tcltk/download.html
下载的版本为tcl8.5.8
Expect下载的地址为:
http://expect.nist.gov/#unix
下载的版本为expect5.43
2、.编译TCL和Expect源程序
编译TCL:
将TCL源程序传输到小型机的某一指定目录($TCLDIR),CD到$TCLDIR/unix目录下,给configure文件赋执行权限,运行configure文件,执行完configure后,生成了Makefile文件,输入gmake命令编译TCL。
编译Expect:
编译expect前首先要修改以下几个地方:
将$TCLDIR /unix目录下的tclUnixPort.h拷贝到$TCLDIR /generic目录下
到$TCLDIR /generic目录,打开tclInt.h,查找typedef int ptrdiff_t;语句,将语句中的int改为long。
到/expect-5.43目录,打开exp_inter.c,查找文件中的
re = Tcl_GetRegExpFromObj(NULL, km->keys,
TCL_REG_ADVANCED|TCL_REG_BOSONLY|TCL_REG_CANMATCH);
并其修改为(删除|TCL_REG_BOSONLY)
re = Tcl_GetRegExpFromObj(NULL, km->keys,
TCL_REG_ADVANCED|TCL_REG_CANMATCH);
将下面语句中的“|TCL_REG_BOSONLY”删除
if (!(Tcl_GetRegExpFromObj(interp, *objv,
TCL_REG_ADVANCED|TCL_REG_BOSONLY))) {
return TCL_ERROR;
}
以上修改完成后,将Expect原程序传输到小型机的某一指定目录($EXPECTDIR),给configure文件赋执行权限,运行configure文件,执行完configure后,生成了Makefile文件,输入gmake命令编译Expect。
3、安装TCL和Expect
安装TCL:
进入root用户,CD到$TCLDIR/unix目录,输入gmake – install完成TCL的安装
安装Expect:
在TCL安装完成后,还是在root用户下,CD到$EXPECTDIR目录,输入gmake – install完成Expect的安装。
注意:安装时如果提示gmake not fund 可能是root用户的.profile文件中的PATH变量没有包含gmake所在的路径,将其路径/usr/local/bin加到PATH后即可。
验证安装结果:
1、 输入man tclsh,如果正常出现tclsh介绍,则安装tcl成功。
2、 输入expect,如果出现expect1.1>,则安装expect成功。
4、编写脚本实现sftp自动传输文件
Expect脚本get_file.sh:
#!/usr/local/bin/expect-f
set host[lindex $argv 0]
set user[lindex $argv 1]
set pass[lindex $argv 2]
setdatapath [lindex $argv 3]
setfilename [lindex $argv 4]
set destdir[lindex $argv 5]
spawn sftp$user@$host
expect"Password:"
send"$pass\r"
expect"sftp>"
send"lcd $destdir\r"
send"cd $datapath\r"
send"get $filename\r"
send"quit\r"
interact
exit
example
shell脚本调用expect脚本实现sftp自动传输文件:
……………
./get_file.sh
…………..
get_file.sh "127.0.0.1" "bizm" "bizm""./b_bizbu/bin" "trade20100304.dat"
………….