shell中spawn什么意思_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 variable

set 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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值