shell中expect的用法

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

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

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

1. expect中的判断语句:

if { condition } {# do your things
} elseif {# do your things
} else {# do your things
}

expect中没有小括号(),所有的if/else, while, for的条件全部使用大括号{}, 并且{ 与左边要有空格,否则会报错。另,else 不能单独占一行,否则会报错。

2. 字符串比较

if { "$node" == "apple" } {puts "apple"
} elseif { "$node" == "other" } {puts "invalid name"exit 70
} else {puts "asd"
}

对比string,使用==表示相等, !=标示不相等。

3. switch 语句

switch $location {"apple" { puts "apple" }"banana" { puts "banana" }default {puts "other"}
}

记得左大括号{ 的左边要有空格,否则会报错

4. 读取用户输入

expect_user -re "(.*)\n"
send_user "$expect_out(1, string)\n"
expect_user -re 表示正则表达式匹配用户按下回车前输入的所有字符
expect_out(1, string) 表示第一个匹配的内容,即回车前所有字符
expect_out(buffer) 所有的buffer内容

5. break && continue

如c中一样,expect一样可以使用break && continue, 并且功能相同。注:只能用在循环中。

6. 定义交互命令

# stick control + z in variableset ControlZ \032
# stick control + c in variable
set ControlC \x03# define string embedded ctrl-z && tab
set oddword foo\032bar\tgorp

7. { }大括号:保留所有字符原有的意思,而不做解释,类似于shell中的单引号

举例:set var {a$b[set c 3]\tddd} 将{}中的一坨东西直接赋值给var

8. {}的另外一个作用是可以续行,(其实是左大括号)

举例:

if {$count < 0} {break;
}
而以下的写法则是错误的:
if {$count < 0}
{break;
}

9. []中括号:执行命令

举例:

set count [expr $count - 1 ]
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

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

shell中expect的用法相关推荐

  1. shell实例第22讲:shell中分隔符IFS用法

    shell中分隔符IFS用法 1.什么是IFS? IFS在shell中是分隔符的意思,即IFS这个变量中存放了分隔符. 2.IFS是全局变量还是局部变量? (1)linux中变量分两种:全局变量env ...

  2. linux 脚本map,shell中map的用法

    ##实例代码 #!/bin/bash cat ./switchsql.txt | while read line do tmp_partition_name=`echo $line | awk -F ...

  3. Shell中的join用法

    Shell中的join用法 将两个文件里指定栏位置同样的行连接起来, 即依照两个文件中共同拥有的某一列, 将相应的行拼成一行(原文件不改变) 内连接(忽略不匹配的行) join file1 file2 ...

  4. Shell中的until用法

    Shell中的until用法 基本格式: until CONDITIONdostatementdone    说明:     until进入循环的条件是:condition不成立时,就执行循环.    ...

  5. shell 中TR的用法,大小写转化

    shell 中TR的用法,大小写转化 1. 用tr 例如:UPPERCASE=$(echo $VARIABLE | tr '[a-z]' '[A-Z]') (把VARIABLE的小写转换成大写)LOW ...

  6. linux bash and,linux bash shell中for的用法and示例

    关于linux bash shell中的for语句 在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循环命令,今天就介绍一下关于for的一些用 ...

  7. shell中的EOF用法

    1.EOF Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell. 可以把EOF替换成其他东西,意思是把内容 ...

  8. shell中test命令用法详解

    1) 与文件检测相关的 test 选项 表1:test 文件检测相关选项列表 文件类型判断 选 项 作 用 -b filename 判断文件是否存在,并且是否为块设备文件. -c filename 判 ...

  9. su oracle eof,探讨shell中EOF的用法

    在shell脚本中,通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主Shell. EOF只是一个分界符,当然也可以用abcde替 ...

最新文章

  1. Android 修改手机hosts域名 (绑定host域名 )
  2. 实战应对三种因素引起的交换故障
  3. [Qt教程] 第39篇 网络(九)进程和线程
  4. WIN10安装ubuntu全过程
  5. kinect:0x80080014
  6. 全景视觉空间直线检测_视觉SLAM深度解读
  7. mysql抓包_mysql抓包工具
  8. 最近一段时间经历的事情即做事方式的总结
  9. MFC日志(2011.4.9)
  10. 聊聊下一代监控:Prometheus
  11. 企业分布式微服务云SpringCloud SpringBoot mybatis (十二)断路器监控(Hystrix Dashboard)...
  12. plsql打开sql窗口快捷键_可以提升3倍开发效率的 Intellij IDEA快捷键大全汇总(2019)...
  13. 蓝桥杯第八届等差素数列
  14. android 电视 vob格式转换,佳佳VOB格式转换器将视频转换到手机格式的方法
  15. PC端浏览器模拟微信浏览器环境
  16. Golang 数组的一些自问自答
  17. 【转】FSB\QPI\DMI总线的区别
  18. 企业IT运维开发一体化解决方案
  19. 邓应海:焦点转向美国数据,央行会议!最新黄金走势分析
  20. 万众瞩目的BAISS公链将如何彻底改变区块链现状?

热门文章

  1. RabbitMQ主题模式/RPC模式
  2. linux rz 无法上传文件,linux rz上传文件及出错解决方案
  3. 再见了,Linux 的魔法时代!
  4. C#中使用python(基于Ironpython)
  5. Mac开启root权限
  6. spring全体系图解(纯手绘)
  7. FAE新手上路(四)
  8. 图像处理(七)——图像复原
  9. 电池供电设备极性校正电路
  10. PHP代码规范性检测