壳牌编程预计免交互

  

今天小编就为大家带来shell编程中expect免交互的文章。小编觉得挺不错的,为此分享给大家做个参考。一起跟随小编过来看看吧。

一 : expect 概述

1.1 expect

  • expect是建立在tcl基础上的一个工具,expect是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规模的linux运维很有帮助
  • 在linux运维和开发中,我们经常需要远程登陆服务器进行操作,登陆的过程是一个交互的过程,可能会需要输入yes/no、password等信息。为了模拟这种输入,可以使用expect脚本

二 : expect 安装

2.1 挂载光盘

2.2 制作本地yum仓库

2.3 执行安装命令

  • yum install expect -y
  • 系统在默认情况下是没有安装expect软件,需要手动安装

三 : expect基本命令

3.1 spawn : 启动进程,并跟踪后续交互信息

3.2 expect

  • expect的一个内部命令,判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超过时间后返回。
  • 只能捕捉由spawn启动的进程的输出

3.3 send :向进程发送字符串,用于模拟用户的输入

  • 该命令不能自动回车换行,一般要加\r(回车)

3.4 interact : 执行完成后保持交互状态,把控制权交给控制台

3.5 Timeout :指定超时时间,过期则继续执行后续指令

  • 单位是:秒
  • timeout -1 为永不超时
  • 默认情况下,timeout是10s

3.6 exp_continue

  • 允许expect继续向下执行指令

3.7 send_user

  • 回显命令,相当于echo

备注:

  • 永不超时常用于网络不稳定时使用
  • shell脚本中的continue 指结束这次循环,开始下一次循环
  • expect脚本中exp_continue指不会结束,继续匹配下一行

3.8  $argv 参数数组

  • expect 脚本可以接受从bash传递的参数,可以使用[lindex $argv n]格式,去进行获得,n从0开始,分别表示第一个,第二个,第三个……参数
  • v 代表value 值,前面是固定格式
  • agv 与n 中间要有空格

3.9 expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就足够了

  • expect eof 是在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof即在等待这个标记
  • 看到eof 即代表结束脚本

四 : expect 语法

shell编程expect免交互

  • expect “要捕捉的内容” {send "要输入的参数\r";}

  • \r   李回车符

    <>李没有带有exp_continue,则匹配一次就推出,有的话就再往下执行匹配一次李 <>李再保险参数表示匹配正则表达式

五:experct执行方式

5.1直接执行

 <代码> root@localhost ~ # vim a.sh
  # !usr/bin/期望立刻,,//预计二进制文件的路径,
  #设置环境
  #超时时间
  设置超时9,,,//设置超时时间
  log_file测试。日志,//日志文件路径
  log_user 1,,,,,//用户数量为1
  #定义变量
  设置主机名lindex $ argv [0]
  设置密码lindex $ argv [1]
  #开启追踪产卵
  产卵ssh root@美元主机名,,//产卵启动命令
  #匹配条件,捕捉
  预计{,,,,//按条件捕捉去发送执行
  ,,“(yes/no)“;
  ,,{发送“是的\ r" exp_continue}
  ,,“* passwor"
  ,,{发送“密码\ r"美元;}
  }
  #权限转交控制台
  交互
  # chmod + x a.sh root@localhost ~
  root@localhost ~ #。/h, argv0 argv1美元 
    <李>

    不交互要写在大括号里面

    <李>
     <代码> [gsy@localhost根]美元预期/usr/bin/expect  
    <李>

    两个日志可加可不加

    <李>

    设置两个变量代表着传参

    <李>

    然后以产卵去开启服务

    <李>

    exprct去捕捉条件,中间送输出指令,\ r回车,exp_continue继续匹配

    <李>交互结束李

5.2嵌入执行

 <代码> root@localhost ~ # vim b.sh
  # !/bin/bash
  ,主机名=1美元
  ,密码=2美元
  ,eof/usr/bin/expect<& lt;,//预计开始EOF标志
  ,产卵ssh root@美元主机名
  ,预计{
  ,,,,“(yes/no)“;
  ,,,,{发送“是的\ r" exp_continue}
  ,,,,“* password"
  ,,,,{发送“密码\ r"美元;}
  ,}
  ,预计“*)#“;,,//检索是否以根登陆
  ,发送“退出\ r"
  ,预计eof
  EOF,,//exprct结束标志,这个EOF不能有空格
  root@localhost ~ #源b。sh 

壳牌编程预计免交互