Expect是在Tcl基礎上創建起來的,它還提供了一些Tcl所沒有的命令,它可以用來做一些linux下無法做到交互的一些命令操作,在遠程管理方面發揮很大的作用。
spawn命令激活一個Unix程序來進行交互式的運行。
send命令向進程發送字符串。
expect 命令等待進程的某些字符串。
expect支持正規表達式並能同時等待多個字符串,並對每一個字符串執行不同的操作.
A. Tcl 安裝
主頁: http://www.tcl.tk
下載地址: http://www.tcl.tk/software/tcltk/downloadnow84.tml
1.下載源碼包
wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz
2.解壓縮源碼包
tar xfvz tcl8.4.11-src.tar.gz
3.安裝配置
cd tcl8.4.11/unix
./configure --prefix=/usr/tcl --enable-shared
make
make install
安裝完畢以后,進入tcl源代碼的根目錄,把子目錄unix下面的tclUnixPort.h copy到子目錄generic中。
暫時不要刪除tcl源代碼,因為expect的安裝過程還需要用。
B. expect 安裝 (需Tcl的庫)
主頁: http://expect.nist.gov/
1.下載源碼包
wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz
2.解壓縮源碼包
tar xzvf expect5.45.tar.gz
3.安裝配置
cd expect5.45
./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic
make
make install
ln -s /usr/tcl/bin/expect /usr/expect/bin/expect
最后
cp /usr/expect/bin/expect /usr/bin/
即可執行expect命令
===============實例=============================
登錄到192.168.1.35機器上,執行ifconfig eth0 和 df-h 退出,實例:
#!/bin/bash
ip1="192.168.1.35"
command="ssh -l root -p 22 $ip1"
expect -c "
spawn $command;
expect {
\"$ip1's password:\" {send \"admin^\r\"; exp_continue}
\"root@\" {send \"ifconfig eth0 \r df -h\r exit\r\"; exp_continue}
}
"
ip=(192.168.1.35
192.168.1.38)
for i in ${ip[@]}
do
echo $i
done
==================================================================================
參考如下:
#!/usr/bin/expect set timeout 10 set host [lindex $argv 0] set username [lindex $argv 1] set password [lindex $argv 2] set src_file [lindex $argv 3] set dest_file [lindex $argv 4] spawn scp $src_file $username@$host:$dest_file expect { "(yes/no)?" { send "yes\n" expect "*assword:" { send "$password\n"} } "*assword:" { send "$password\n" } } expect "100%" expect eof
上述重命名scp_scp.sh
若批量執行,則外套一個腳本調用
./scp_scp.sh 192.168.1.110 root password /etc/hosts /etc/hosts
【轉】http://www.jb51.net/article/34005.htm
==================================================================================
【轉】http://blog.sina.com.cn/s/blog_65f27fc20101fjm9.html
做個備份