zoukankan      html  css  js  c++  java
  • shell 中的expect 用法

    expect一般用于实现用脚本来自动远程登录,对远程机器执行相关操作

    测试机上的expect目录一般在/usr/bin/expect路径

    下面是从网上查询的用法总结:

    1. expect中的判断语句:     
    1. if { condition } {
    2.      # do your things
    3. } elseif {
    4.      # do your things
    5. } else {
    6.      # do your things
    7. }
    expect中没有小括号(),所有的if/else, while, for的条件全部使用大括号{}, 并且{ 与左边要有空格,否则会报错。另,else 不能单独占一行,否则会报错。
    2. 字符串比较
    1. if { "$node" == "apple" } {
    2.      puts "apple"
    3. } elseif { "$node" == "other" } {
    4.      puts "invalid name"
    5.      exit 70
    6. } else {
    7.      puts "asd"
    8. }
    对比string,使用==表示相等, !=标示不相等。
    3. switch 语句
    1. switch $location {
    2.     "apple" { puts "apple" }
    3.     "banana" { puts "banana" }
    4.     default {
    5.         puts "other"
    6.      }
    7. }
    记得左大括号{ 的左边要有空格,否则会报错
    4. 读取用户输入
    1. expect_user -re "(.*) "
    2. send_user "$expect_out(1, string) "
    expect_user -re 表示正则表达式匹配用户按下回车前输入的所有字符
    expect_out(1, string) 表示第一个匹配的内容,即回车前所有字符
    expect_out(buffer) 所有的buffer内容
    5. break && continue
    如c中一样,expect一样可以使用break && continue, 并且功能相同。注:只能用在循环中。
    6. 定义交互命令
    1. # stick control + z in variable
    2. set ControlZ 32
    3. # stick control + c in variable
    4. set ControlC x03
    5. # define string embedded ctrl-z && tab
    6. set oddword foo32bar gorp

    7. { }大括号:保留所有字符原有的意思,而不做解释,类似于shell中的单引号
    举例:set var {a$b[set c 3] ddd} 将{}中的一坨东西直接赋值给var
    8. {}的另外一个作用是可以续行,(其实是左大括号)
    举例:
    1. if {$count < 0} {
    2.    break;
    3. }
    而以下的写法则是错误的:
    1. if {$count < 0} 
    2. {
    3.    break;
    4. }
    9. []中括号:执行命令
    举例:
    1. set count [expr $count - 1 ]
    2. set a [set b 0]
    10. ()小括号:expect中没有小括号。所有在C中用的小括号都要换成大括号
     
    11. spawn ssh -l username 192.168.1.1
      spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命 令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。
      它主要的功能是给ssh运行进程加个壳,用来传递交互指令。
    12. expect "password:"
      这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命 令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒

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

  • 相关阅读:
    集训作业 洛谷P1135 奇怪的电梯
    集训作业 洛谷P1433 吃奶酪
    集训作业 洛谷P1443 马的遍历
    集训作业 洛谷P1032 字串变换
    T3 成绩单 题解
    T4 字符串的修改 题解
    P3379 最近公共祖先(LCA) 洛谷
    集训作业 洛谷P3913 车的攻击
    解决intellij idea卡顿的方法
    好的在线开发工具推荐
  • 原文地址:https://www.cnblogs.com/li-daphne/p/7234721.html
Copyright © 2011-2022 走看看