一、 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
!
转载于:https://blog.51cto.com/12865902/2405182