安装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 root@192.168.1.1:/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 root@192.168.1.1:/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