linux - expect安装及使用

        安装except是一个用来交互的工具,通常为了避免手动输入的必要,在脚本中可使用except实现自动化


一、安装

1、查看系统中是否有安装except

# whereis expect

2、安装tcl

2.1 expect包依赖于tcl,需要先编译安装tcl,当前版本8.4.19,可根据需求选择版本

# wget https://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz

# tar -zxvf tcl8.4.19-src.tar.gz

# cd tcl8.4.19/unix && ./configure

# make

# makeinstall

3、安装except

# wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz

# tar zxvf expect5.45.tar.gz

# cd expect5.45

# ./configure --with-tcl=/usr/local/lib --with-tclinclude=../tcl8.4.19/generic

# make

# make install

# ln -s /usr/local/bin/expect /usr/bin/expect

注意:这里的configure命令需要使用–with-tclinclude选项传入tcl安装包中的generic文件夹路径

4、查看是否安装成功

# expect

expect1.1> exit

二、简单使用

    shell脚本中expect的两种运用方式

1、单独使用

#!/usr/bin/expect  #引入/usr/bin/expect

    set timeout -1  #设置超时时间:expect命令阻塞超时时会自动往下继续执行。将timeout配置为-1时表示expect一直阻塞直到与期待的字符串匹配上才继续往下执行。超时时间timeout默认为10s

    spawn scp xxx.tar.gz [email protected]:/path  #spawn命令用于启动一个子进程,执行后续命令

    expect {

    "*es/no)?*" {

    send "yes\r"  #当检测到有yes/no时,匹配yes,/r是回车的意思

    expect "*assword: "

    { send "123456\r";exp_continue}  #当检测到密码时,发送密码,exp_continue是继续执行

    }

    "*assword: " {

    send "123456\r"

    }

    }

    expect eof  #所有脚本必须以expect eof或interact结束,一般自动化脚本以expect eof结束就行了

脚本大意为,拷贝当前文件到指定服务器,当第一次连接时需要输入yes,然后输入密码,当二次连接时,直接输入密码

2、混合使用

#!/bin/bash

...... # 脚本命令(略)

/usr/bin/expect << EOF  #使用expect时必须引入/usr/bin/expect << EOF 

    set timeout -1

    spawn scp xxx.tar.gz [email protected]:/path  #spawn命令用于启动一个子进程,执行后续命令

    expect {

    "*es/no)?*" {

    send "yes\r"  #当检测到有yes/no时,匹配yes,/r是回车的意思

    expect "*assword: "

    { send "123456\r";exp_continue}  #当检测到密码时,发送密码,exp_continue是继续执行

    }

    "*assword: " {

    send "123456\r"

    }

    }

    expect eof  #所有脚本必须以expect eof或interact结束,一般自动化脚本以expect eof结束就行了

    exit #退出


----------------------------------------------------------------------------------

参考:https://blog.csdn.net/wangtaoking1/article/details/78268574

你可能感兴趣的:(linux - expect安装及使用)