Expect学习笔记

分布式文件系统fastdfs架构剖析及配置优化 FastDFS是一款开源的轻量级分布式文件系统 纯C实现,支持Linux、FreeBSD等UNIX系统 类google FS,不是通用的文件系统,只能通过专有API访问,目前提供了C、Java和PHP API 为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性 FastDFS可以看做是基于文件的key value pair存储系统,称作分布式文件存储服务更为合适 立即下载
作者: Badcoffee
Email: blog.oliver@gmail.com

2004年11月

原文出处: http://blog.youkuaiyun.com/yayong
版权所有: 转载时请务必以超链接形式标明文章原始出处、作者信息及本声明

        接触Expect是迫不得已。 系统管理员在工作中经常会遇到这样的问题,需要实现一个自动交互的工具,这个
工具可以自动Telnet或者Ftp到指定的 服务器上,成功login之后自动执行一些命令来完成所需的工作。
        当然,有很多编程语言可以去解决此类问题,比如用C、Perl、或者Expect。
        显然,尽管C是无所不能的,但是解决此类问题还是比较困难,除非你熟悉Telnet或者Ftp协议。
        曾经见过别人用C实现了一个简单的Telnet客户端协议的 程序,可以在这个 程序加入自己的代码来捕获服务端
的输出,根据这些输出来发送适当的指令来进行远程控制。
        使用Perl一样可以实现这样的功能,然而,Expect做的更出色,而且除支持 Unix/Linux平台外,它还支持 Windows
平台,它就是为 系统管理和软件测试方面的自动交互类需求而产生的:
               
                Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。


        Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:
       
                Expect是一个用来实现自动交互功能的软件套件(Expect [is a] software suite for automating interactive tools)。

        Expect语言是基于Tcl的 , 作为一种脚本语言,Tcl具有简单的语法:      
 
                cmd arg arg arg 
                一条Tcl命令由空格分割的单词组成. 其中, 第一个单词是命令名称, 其余的是命令参数 . 
                $foo 
                $符号代表变量的值. 在本例中, 变量名称是foo. 
                [cmd arg] 
                方括号执行了一个嵌套命令. 例如, 如果你想传递一个命令的结果作为另外一个命令的参数, 那么你使用这个符号 .
                "some stuff" 
                双引号把词组标记为命令的一个参数. "$"符号和方括号在双引号内仍被解释 . 
                {some stuff} 
                大括号也把词组标记为命令的一个参数. 但是, 其他符号在大括号内不被解释. 
                /
                反斜线符号(/) 是用来引用特殊符号. 例如:/n 代表换行. 反斜线符号也被用来关闭"$"符号 , 引号,方括号和大括号的特殊含义 .
   
        最好的学习方法就是边干边学,对于已经熟悉一种编程语言的人来说,用另一种新的语言来写 程序解决问题,是很
容易的事。所以大概了解一下基本语法后,就一边动手解决问题,一边查手册吧。
        关于Tcl和Expect的语法,请参考 aspx">Unix/Linux 平台任务的自动化相关部分。

       例1:下面是一个telnet到指定的远程机器上自动执行命令的Expect脚本,该脚本运行时的输出如下:

# /usr/bin/expect sample_login.exp root 111111
spawn telnet 10.13.32.30 7001
Trying 10.13.32.30...
Connected to 10.13.32.30.
Escape character is '^]'.


accho console login: root
Password:
Last login: Sat Nov 13 17:01:37 on console
Sun Microsystems Inc.   SunOS 5.9  May 2004
#

Login Successfully...


# uname -p
sparc
# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
eri0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 10.13.22.23 netmask ffffff00 broadcast 10.13.22.255
        ether 0:3:ba:4e:4a:aa
# exit

accho console login:

Finished...



       
下面是该脚本的源代码:


# vi sample_login.exp:


proc do_console_login {login pass} {

        set timeout 5
        set done 1
        set timeout_case 0

        while ($done) {
                expect {
                        "console login:" { send "$login/n" }
                        "Password:" { send "$pass/n" }
                        "#" {
                                set done 0
                                send_user "/n/nLogin Successfully.../n/n"
                        }
                        timeout {
                                switch -- $timeout_case {
                                        0 { send "/n" }
                                        1 {
                                                send_user "Send a return.../n"
                                                send "/n"
                                        }
                                        2 {
                                                puts stderr "Login time out.../n"
                                                exit 1
                                        }
                                }
                                incr timeout_case
                        }
                }
        }

}


proc do_exec_cmd {} {

        set timeout 5
        send "/n"
        expect "#"
        send "uname -p/n"
        expect "#"
        send "ifconfig -a/n"
        expect "#"
        send "exit/n"
        expect "login:"

        send_user "/n/nFinished.../n/n"

}

if {$argc<2} {

        puts stderr "Usage: $argv0 login passwaord./n "
        exit 1
}

set LOGIN   [lindex $argv 0]
set PASS    [lindex $argv 1]

spawn telnet 10.13.32.30  7001

do_console_login $LOGIN $PASS
do_exec_cmd

close

exit 0


        上面的脚本只是一个示例,实际工作中,只需要重新实现 do_exec_cmd函数就可以解决类似问题了。
        在例1中,还可以学习到以下Tcl的语法:

        1. 命令行参数
          
            $argc, $argv 0, $argv 1 ... $argv n

            if {$argc<2} {
                    puts stderr "Usage: $argv0 login passwaord./n "
                    exit 1
            }
    
        2. 输入输出
            
            puts stderr "Usage: $argv0 login passwaord./n "


        3. 嵌套命令

            set LOGIN   [lindex $argv 0]

            set PASS    [lindex $argv 1]

        4. 命令调用        
       
           
spawn telnet 10.13.32.30  7001

        5. 函数定义和调用

            
proc do_console_login {login pass} {

                    ..............            

             }

        6. 变量赋值

            
set done 1
        
        7. 循环

            
while ($done) {

                   ................

             }

        8. 条件分支 Switch

            
switch -- $timeout_case {
                    0 {
                       ...............
                    }
                    1 {
                       ...............              
                    }
                    2 {
                       ...............          
                    }
              }


        9. 运算
   
            
incr timeout_case


        此外,还可以看到 Expect的以下命令:
        send
        expect
        send_user

        可以通过-d参数调试Expect脚本:

       
# /usr/bin/expect -d sample_login.exp root 111111

        ......调试输出和程序输出.......
 
【BUAA】【计组】计算机组成 pre (含详细解析) BUAA 计算机组成 本文章旨在为@走肖暂时无法接通的系列文章创造一个目录,收藏本文章,方便查阅! 1. 入门测试 2. 基础知识 3. Logisim   欢迎来到 Logisim 的世界   Logisim 门电路   Logisim 组合电路   Logisim 时序电路   Logisim 仿真与调试   应用与挑战 4. Verilog 与仿真工具   前言   ISE 入门   VCS 入门   Verilog 语法   Verilog 题目实例与分析   Verilog 工程的设计开发调试 阅读详情

相关推荐

Matcap与菲涅尔

菲尼尔效果(简化版公式):fresnel = base + scale*((1-v*n)^power)透明队列为后前渲染,不关闭深度写入则会覆盖之前的像素,导致混合不了。y的值为0~1,根据x3返回对应y值。两色混合做个demo看看!混合为什么要关闭深度写入?

weixin_62773441的博客 373

Expect学习笔记(1)

Expect学习笔记(1)作者: BadcoffeeEmail: blog.oliver@gmail.com2004年11月原文出处: http://blog.youkuaiyun.com/yayong版权所有: 转载时请务必以超链接形式标明文章原始出处、作者信息及本声明        接触Expect是迫不得已。系统管理员在工作中经常会遇到这样的问题,需要实现一个自动交互的工具,这个工具可以自动Telnet

新博客请访问- http://oliveryang.net 3677

重塑计算的五层蛋糕:解读黄仁勋CES2026演讲背后的AI新秩序与物理世界

2026年CES演讲揭示AI新纪元:从语言模型到物理智能 NVIDIA CEO黄仁勋在2026年CES演讲中描绘了计算产业的根本性变革。核心突破包括: 计算范式转移:从指令执行转向意图理解,智能体系统崛起 物理AI突破:发布Cosmos世界模型,通过合成数据训练AI理解物理定律 全新VeraRubin计算平台:6芯片协同设计,解决摩尔定律放缓与AI需求增长的矛盾 自动驾驶革命:推出具备推理能力的Alpamayo模型,实现L4级自动驾驶 演讲标志着AI正从数字世界迈向物理世界,NVIDIA通过全栈布局,正在重

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 1279

expect非交互式下载sftp资源,解决$1变量不能识别的问题

#!/bin/bash [ $# -eq 1 ] && { read -p "确定要下载包:$1? (y/n)" stat [ $stat != y ] && exit 1 /usr/bin/expect << EOF set timeout 5 spawn sftp han@192.168.0.222:/data/han/ expect { "password:" { send han@123\r } } expect "sftp&gt

weixin_43400640的博客 507

VS2022命令行编译C++报错?一招解决‘fatal error C1034: iostream: 不包括路径集‘

本文针对VS2022命令行编译C++时常见的'fatal error C1034: iostream: 不包括路径集'错误,深入剖析了其根源在于环境变量缺失。文章提供了永久配置用户环境变量(PATH、INCLUDE、LIB)的一劳永逸解决方案,确保在任何终端中都能直接使用cl命令进行编译,并给出了进阶配置与常见错误排查指南。

weixin_29011667的博客 305

树莓派入门教程 - 0 - 准备篇 - 0.0 SD卡制作树莓派系统镜像启动盘 开机

电脑需要提前安装的工具: sd卡格式化工具SDFormatter,官网下载链接:https://www.sdcard.org/downloads/formatter/ 镜像烧录工具Win32 Disk Imager,官网下载链接:https://win32diskimager.download/ 使用到的硬件: 一张容量大于等于16GB的TF卡 + 读卡器; 树莓派板卡。3B、3B+、4B等各型号均可,带有 HDMI接口即可。 HDMI接口的显示屏。 鼠标、键盘、电脑。 1....

Mark_md的博客 6975

fastDfs上传文件报错:recv cmd:32 is not correct,expect cmd:100错误

TrackerClient trackerClient = new TrackerClient(); trackerServer = trackerClient.getConnection(); //注意加上这行,获取连接 StorageClient storageClient = new StorageClient(trackerServer, storageServer); fastDfs上传文件报错: 注意加上这中间这行,每次获取连接,用完会关闭。 ...

蓝关故人 4157

python 携程登陆_Python 学习练习之用户登录接口

目的:用python实现简单用户注册,登陆,加黑功能,放个流程图吧。以下内容仅为练习 执行流程:[root@zabbix login]# python user_login.pyusername:tompassword:123456Are you want to register ? [y/n]yRegister successful,Please relogin ![root@zabbix lo...

weixin_28679635的博客 519

FastDFS相关问题

FastDFS相关问题

石磊的博客 1393

WPF实战:HelixToolkit 3D图形开发入门指南

本文详细介绍了如何使用HelixToolkit在WPF中进行3D图形开发,从环境搭建到创建第一个3D程序(如彩色立方体),再到进阶技巧和常见问题排查。通过实战案例和性能优化建议,帮助开发者快速掌握3D场景构建和模型导入技术,提升开发效率。

weixin_29197051的博客 761

深入解析基于Fluent的蒸发冷凝相变UDF程序及其在重力热管液体蒸发冷凝变化计算中的应用

ANSYS Fluent是一款功能强大的CFD软件,广泛应用于流体流动、传热、化学反应和多相流等领域的数值模拟。Fluent提供了丰富的物理模型和求解器,支持用户自定义函数(UDF)以扩展其功能,实现更为复杂和特定的模拟需求。UDF是用C语言编写的程序,允许用户在Fluent中自定义物理模型、边界条件、源项等,以实现特定的模拟需求。在处理复杂的相变过程、非均匀物性参数或特定的热传导机制时,UDF提供了极大的灵活性和扩展性。

qq_38334677的博客 1265

记录:fastdfs上传报错IOException: recv cmd: 0 is not correct, expect cmd: 100解决方案

记录:fastdfs上传报错IOException: recv cmd: 0 is not correct, expect cmd: 100解决方案

Tomcat_wr8的博客 3127

Kafka 入门篇(一)

初识 Kafka 什么是 Kafka Kafka 的基本术语 Kafka 的特性(设计原则) Kafka 的使用场景 Kafka 的消息队列 点对点模式的消息队列 发布-订阅模式的消息队列 Kafka 系统架构 核心 API Kafka 为何如此之快 broker 端配置 broker.id port zookeeper.connect log.dirs num.recovery.threads.per.data.dir auto.create.topics.enable topic默认配置 num.par

1239

Expect 学习笔记

原贴:[u]Expect 学习笔记 [/u]   接触Expect是迫不得已。系统管理员在工作中经常会遇到这样的问题,需要实现一个自动交互的工具,这个工具可以自动Telnet或者Ftp到指定的服务器上,成功login之后自动执行一些命令来完成所需的工作。  当然,有很多编程语言可以去解决此类问题,比如用C、Perl、或者Expect。  显然,尽管C是无所不能的,但是解决此类问题还是比较困难,除非

最实用的Linux博客 5897

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

expect学习笔记及实例详解

expect学习笔记及实例详解引用自:http://wenku.baidu.com/view/b65e103610661ed9a...

cizongzhic79075的博客 1134

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

expect学习笔记

#!/usr/bin/expect set password "qwertyuiopN" set date [exec date -d yesterday "+%Y%m%d"] cd /www/files/ spawn scp -P 22 DM_OS_TESTSPEED$date.txt root@172.16.244.3:/www/transferspeed_zw/files/ set time

熊猫的专栏 669

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

linux expect 学习笔记及实例

因为最近正在学习expect脚本,但是发现网上好多文章都是转载的,觉得这篇文章还不错,所以拿过来和大家分享一下~  1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示: 1.1 首行加上/usr/bin/expect 1.2 spawn: 后面加上需要执行的shell命令,比如说spawn sudo touch testfile 1.3 expect:

逆风飞扬 5302
上一篇: 一位程序员的演变历程(The Evolution of a Programmer)
下一篇: crt应用脚本一例子,windows下的expect
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值