歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Llinux下的expect的簡單用法及舉例

1、使用expect前,需要先安裝兩個rpm包,下載:

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2012年資料/7月/27日/Llinux下的expect的簡單用法及舉例/

# rpm -ihv expect-5.43.0-8.el5.i386.rpm
# rpm -ihv expect-devel-5.43.0-8.el5.i386.rpm

2、使用腳本文件的例子--實現自動輸密碼
#!/usr/bin/expect -f
set password 123456
#download
spawn scp [email protected]:/root/a.wmv /home/yangyz/
set timeout 300
expect "[email protected]'s password:"
set timeout 300
send "$password\r"
set timeout 300
send "exit\r"
expect eof


3、在sh腳本中嵌入expect的例子--通過連上一個公網的服務器再轉跳到一個內網的服務器上,用腳本實現不用輸密碼,直接使用./goto.sh servername
#!/bin/bash
passmsmallq10="a"
passzhsh="a"
passfcwr="b"
passwapfx="c"
passadfx="d"


ip1="200.100.10.10"
ip2="10.100.100.70"
ip3="10.100.100.60"
ip4="10.100.100.10"
ip5="10.100.100.20"


case $1 in
"zhsh") passstr=$passzhsh ipstr=$ip2 ;;
"fcwr") passstr=$passfcwr ipstr=$ip3 ;;
"wapfx") passstr=$passwapfx ipstr=$ip4 ;;
"adfx") passstr=$passadfx ipstr=$ip5 ;;
*) echo "The parameter $1 isn't exist"
exit 0 ;;
esac


command1="ssh -l m_smallq -p 36000 $ip1"
command2="ssh -l mqq -p 36000 $ipstr"


expect -c "
        set timeout 60;
        spawn $command1;
        expect {
                \"221.130.15.10's password:\" {send \"$passmsmallq10\r\"; exp_continue}
                \"m_smallq\" {send \"$command2\r\"; exp_continue}
                \"mqq's password:\" {send \"$passstr\r\";interact}
                }
        "


對上面例子的expect的解說
expect -c "..."  --裡面輸入命令
expect {...}     --裡面的多行記錄,從上向下掃描匹配,誰先匹配誰先處理。


4、ssh到另一台機子執行df -h後退出,要點是send後面可以跟多個命令,通過\r來分行成多個命令
#!/bin/bash
ip1="183.62.178.191"
command1="ssh -l root -p 14322 $ip1"


expect -c "
        spawn $command1;
        expect {
                \"183.62.178.191's password:\" {send \"aa\r\"; exp_continue}
                \"root@\" {send \"df -h\r exit\r\"; exp_continue}
                }
        "

Copyright © Linux教程網 All Rights Reserved