首页 > 系统服务 > 详细

shell expect

时间:2019-08-06 11:53:01      阅读:102      评论:0      收藏:0      [点我收藏+]

expect 用于自动化交互

1.安装

expect是基于 tcl 语言,需要安装tcl

(1)准备tcl,expect源码包

(2)配置编译安装

2.expect的命令

expect的核心是spawn、expect、send、set。

(1)spawn调用要执行的命令

(2)expect监听交互输出

(3)send进行交互输入

(3)set设置变量值

(4)interact交互完后,将控制权交给控制台。

(5)expect eof,与spawn对应,表示捕捉终端输出信息终止,类似if...endif

其他设置

set timeout -1,设置expect永不超时

set timeout 300,如果300后没有捕捉到expect的监听的内容,那么就退出

3.expect的语法

expect使用的是tcl语法

基本如下,

(1)命令之后是参数,互相用空格间隔

cmd arg arg arg

 (2)使用变量

set var 1000  # 定义变量
set var [lindex $argv 0] #将 var = argv[0]
$foo

 (3)嵌套命令,将一个命令的输出,作为另一个命令的输入参数

cmd1 [cmd2 arg]

 (4)双引号,将词组标记为一个参数,双引号内$符号有效

cmd "hello world $foo"

(5)大括号, 将词组标记为一个参数,但大括号内无法扩展变量

cmd {hello world}

 (6)反斜线,转义

 

3.示例:

首先有一个交互程序main.c

#include <stdio.h>

int main(int argc, char **argv)
{
        int i = 0;
        char buf[BUFSIZ] = {0};
        for (i = 0; i < argc; i++)
                printf("argv[%d]:%s\n", i, argv[i]);

        for (i = 0; i < 4; i++) {
                printf("input\n");
                gets(buf);
                puts(buf);
        }

        return 0;
}

 使用如下sh

#!/usr/local/tcl/bin/expect
spawn ./a.out  # 开启子进程,执行a.out
expect "input"  # 监听 "input"
send "xxxx\n"  
expect "input"
send "xxxx\n"
expect "input"
send "xxxx\n"
expect "input"
send "xxxx\n"
expect eof
exit

 使用命令行参数

set var [lindex $argv 0]

将第0个命令参数传给 var

与其他sh连用

由于expect一个独立的shell程序,所以无法写在一个文件,只能通过文件调用。

#!/bin/sh
echo "hello world"
./expect.sh

 

shell expect

原文:https://www.cnblogs.com/yangxinrui/p/11307720.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!