expect

                       expect 


expect是可以實現服務器之間自動交互的工具


  I、 expect安裝

expect工具是否安裝:

          在Linux系統命令行執行which expect,若返回/usr/bin/expect表示已經安裝過,反之則沒有安裝。

expect安裝說明:

         安裝有RPM包可下載expect的RPM包,依賴tcl包,所以tcl也要一併安裝。

expect安裝步驟:

          1、先下載expect,tcl,tcl-devel包。

          2、傳到要安裝的系統上(主意包的版本)。

          3、可直接執行rpm -ivh package-name(安裝順序tcl、tcl-devel、expect)。  


  II、expect_scp腳本

[root@ora exp]# cat expect_scp 

#!/usr/bin/expect       

#

set timeout 3

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 $username@$host:$src_file $dest_file

 expect "(yes/no)?"{send "yes\n"}

 expect "*assword:"{send "$password\n"}

 expect "100%"

expect eof

You have new mail in /var/spool/mail/root

[root@ora exp]# 

    

     III、測試上面腳本

[root@ora exp]# ls

01scp.py  expect_scp  mult.sh  mult.sh.bak  scp01.exp  scp.py

[root@ora exp]# ./expect_scp 192.168.168.171 root qw1501as /root/1q ./

spawn scp [email protected]:/root/1q ./

reverse mapping checking getaddrinfo for bogon [192.168.168.171] failed - POSSIBLE BREAK-IN ATTEMPT!

[email protected]'s password: 

1q                                                                                                                   100%   84     0.1KB/s   00:00    

[root@ora exp]# 

 

對II註釋:

     set 在此處是定義變量的

     set host [lindex $argv 0]     //host是變量名,在此處定義的是IP。[]中是給變量傳遞的參數,格式是lindex $argv # 在此處的“#”是數字0表示第一個參數依次往後1第二個。。。

     set username [lindex $argv 1]  //username 在此處定義用戶名

     set password [lindex $argv 2]  //password 在此處定義密碼

     set src_file [lindex $argv 3]  //src_file 在此處定義的是源文件的位置

     set dest_file [lindex $argv 4] //dest_file 在此處定義的是目標文件的位置

spawn scp $username@$host:$src_file $dest_file

         //這一行引用了scp命令,這個scp命令要在expect環境下執行前面需要加spawn 

expect "(yes/no)?"  //expect能匹配到sh環境內的字符,支持正則表達式.

send "yes\n"  //send能夠把後面的數據傳給sh進程

expect和send結合,較清晰的體現出了自動交互功能,說白了就是expect匹配到出現的字符,到該要手動輸入的字符交給send來完成。

expect "100%" //匹配到  100%

expect eof //結束

對III註釋:

     當執行expect腳本時,可以./expect_scp 參數1 參數2 參數3...此處的參數的順序要和expect的腳本中定義的變量的參數的順序一致。


要是批量scp的話需要再寫個shell腳本,在服務器上,執行之後即可批量傳輸了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章