linux+expect插件_linux下expect使用教程

一、expect介绍

Expect是Unix系统中用来进行自动化控制和测试的软件工具,由DonLibes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。简单地说,expect是一个工具,可以根据用户设定的规则和系统进程进行自动化交互,例如远程登陆的密码输入、自动化的执行远程命令。

二、expect例子

下面的脚本完成远程服务器的登录操作,并在远程服务器上执行一些简单的命令,在整个交互中不需要人工进行干预。

#!/usr/bin/expectif {$argc < 2} {

puts stdout"$argv0 err params\n"exit1}

proc do_console_login {loginpass} {

puts $login;

puts $pass;

}

puts [llength $argv]

set timeout10set user [lindex $argv0]

set password [lindex $argv1]

do_console_login $user $password

spawnls -l

expect"login_52.exp"expect eof

spawnssh $user@10.12.18.37#36000expect {"yes/no" {send "yes\n"expect"assword:" {send "$password\n"}

}"*assword:" {send "$password\n"}

}

expect"~>"send"cd /share/arlenhou/; la \n"expect"arlenhou>"interact

三、expect语法介绍

1. 命令行参数

$argc,$argv 0,$argv 1 ... $argv n

argc表示命令行参数个数,后面分别表示各个参数项,0表示第一个参数,1表示第二个参数,以此类推,可以通过lindex获取对应参数值(lindex $argv 0)。

if {$argc < 2} {

puts stdout"$argv0 err params\n"exit1}

2. 输入输出

puts stderr "Usage: $argv0 login passwaord.n"puts “hello world”

puts stdout"1234"

3. 嵌套命令

set user [lindex $argv 0]

set password [lindex $argv1]

把命令行第一个参数赋给user,第二个参数赋给password。

4. 命令调用

spawn ssh $user@10.12.18.37#36000

spawn启动一个进程,进程执行ssh命令,程序后面可以通过expect/send和新起的进程进行交互。

5. 函数定义和调用

proc do_console_login {loginpass} {

}

do_console_login $user $password

6. 变量赋值

set user “arlen ”

set int01

7. 循环

while ($done) {

}

8. 条件分支Switch

switch --$var {0{

}1{

}2{

}

}

三、常用指令

1. [#!/usr/bin/expect]

这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。

注意:这一行需要在脚本的第一行。

2. [set timeout 30]

设置超时时间的,单位是:秒

3. [spawn ssh $user@10.12.18.37#36000]

spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

4. [expect "assword: "]

这里的expect也是expect的一个内部命令,expect的shell命令和内部命令是一样的,但不是一个功能。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒。

5. [send "$password\n"]

这里就是执行交互动作,与手工输入密码的动作等效。

6. [interact]

执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。

四、总结

expect工具在日常的运维中非常有用,可以用在多机器服务重启、远程copy、多机器日志查看、ftp文件操作、telnet等多种场景。shell中有些操作会受限于密码输入的人工操作,expect工具可以代替人工来完成一些交互性工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值