一、            Expect说明

expect是单独的一种脚本语言工具。expect不是/bin/sh,也不是/bin/bash,他是Linux用于模拟人机交互行为的程序

 

二、            安装关联包

# yum -y install tcl*

# yum -y install expect*

 

 

三、            expect语法说明

需要#/usr/bin/expect作为起始行

 

sspawn: 后面加上需要执行的shell命令,比如说spawn sudo touch testfile

expect   //expect脚本中用于等待和分析机器执行结果用

send      //expect脚本中用于模仿“人"向机器进程发出linux命令用

send_user    //expect脚本中用于直接向中间载体-字符终端发送信息用

interact    //expect脚本中用于将交互双方由expect脚本和机器内核改为——>字符终端和机器内核(即为正常人和机器交互的模式)

 

 

四、            示例一

使用scp自动传输文件到其他服

 

# cat scp.sh

#!/bin/sh

svr="192.168.205.201"

expect <<!

spawn scp -r /opt/mysql-5.6.36.tar.gz root@$svr:/opt

expect {

        "(yes/no)?"

                {

                        send "yes\n"

                        expect "*assword:" {send "123456\n"}

                }

                "*assword:"

                {

                        send "123456\n"

                }

}

expect "100%"

expect eof

!

 

说明:

去登陆远程机器,这是终端会给出提示信息问是否继续Yes/No? 如果yes就输入密码,登陆成功后scp命令就开始传文件。其中expect{}里面的代码就是预判断终端输出的内容里是否有(yes/no)?,如果有就自动输入yes,(send "yes\n");然后再判断后面的输出里是否含有*password:",如果有就自动输入预置的密码。从而达到自动进行交互的目的。

 

 

 

例子2

# cat fdisk.sh

#!/bin/sh

expect << !

spawn fdisk /dev/sdb

expect {

        "m for help"

        {

                send "n\n"

                send "p\n"

                send "1\n"

                send "1\n"

                send "+100M\n"

                send "w\n"

        }

}

expect eof

!

 

 

例子3

# cat ssh.sh

#!/usr/bin/sh

export IP=192.168.205.201

export USER=root

export PASSWORD=123456

expect <<!

spawn ssh $USER@$IP

expect {

        "*yes/no*" { send "yes\r"; exp_continue}

        "*password:*" { send "$PASSWORD\r" }

}

expect "#*"

send "hostname\r"

expect eof

!