expect介绍与实践

一、概述

我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能。而Expect就使用来实现这种功能的工具。

Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年 开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools)。使用它系统管理员 的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。 Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。甚至可以实现实现简单的BBS聊天机器人。 :)

expect有四个核心的指令:
spawn:启动新进程,后跟新进程要执行的指令;
expect:指定要监听的字符串,如果spawn进程返回了匹配的字符串(如标准输入的提示信息),则触发send;
send:发送指定的字符串到spawn进程,代替标准输入;
interact:用户参与交互;

yum install expect

#change passwd
#!/usr/bin/expect
spawn passwd admin
expect {
"*password: " { send "toor\r"; exp_continue}
"password:" { send "toor\r"}
}
interact
#login in root
#!/usr/bin/expect
spawn su - root
expect "*Password: "
send "toor\r"
interact
#login with no password
#!/bin/bash
SERVERS="192.168.1.241 192.168.1.242"
PASSWD="123456"

function sshcopyid
{
    expect -c "
        set timeout -1;
        spawn ssh-copy-id $1;
        expect {
            \"yes/no\" { send \"yes\r\" ;exp_contine; }
            \"password:\" { send \"$PASSWD\r\";exp_continue; }
        };
        expect eof;
    "
}
for server in $SERVERS
do
  sshcopyid $server
done
#!/bin/bash

SERVER="192.168.1.241"
PASSWD=nf123456

expect -c "
   set timeout -1;
   spawn ssh $SERVER;
   expect {
       \"yes/no\" { send \"yes\r\" ;exp_contine; }
       \"password:\" { send \"$PASSWD\r\"; }
   };

   expect \"]#\" { send \"ls -la \r\" };
   expect \"]#\" { send \"exit \r\" };
   expect eof;
   "

你可能感兴趣的:(expect介绍与实践)