技术解析

Linux 自动化大神看过来,求助啊
0
2021-06-16 13:20:04
idczone

expect 使用方式求助

我想要判断执行程序的输出,是否有我指定的字符串怎么搞啊
比如
P1 程序执行后输出有 两种情况 情况 a:回显字符串中包含 aaaaa 情况 b: 回显字符串中包含 bbbbb
现在想判断 P1 程序执行后 如果是情况 a 就 执行 aCommandLine 情况 b 就 执行 bCommandLine
伪代码如下 :

if {expect "aaaa"} {
expect "aaaa" { send "aCommandLine"}
} else if { expect "bbbb"} {
expect "bbbb" { send "bCommandLine"}
}


你把输出传到一个变量里面,然后在判断变量

怎么将回显的字符串存到变量啊 大佬

ret=`P1`
或者
ret=$(p1)

出售《 TCL/TK 入门经典》

不如用 python
subprocess 直接抓进程的 stdout stderr
然后 if elif else

我很菜,但是我不明白为什么要 expect 放到 if 里面?
难道不是:
expect "aaaa" {
send "aCommandLine"
}
expect "bbbb" {
send "bCommandLine"
}

参考
https://gist.github.com/prabirshrestha/3080525

我完全没有用过 expect,直接到了 ansible 时代

```
/>auto_login_ssh () {
expect -c "set timeout 6;
spawn -noecho scp -o StrictHostKeyChecking=no /home/appadmin/.ssh/id_rsa.pub [email&/> expect *assword:*;
send -- $1\r;
expect *id_rsa.pub*;
sleep 3;
expect *denied*;
exit;
interact;";
}
auto_login_ssh $1 $2 $3
```
供参考

或许你这个方法是对的,我最后也是采用这种方法

感谢各位,结帖了,各位提供的是 shell + expect 我指的是 纯 expect 脚本(本人问题描述有问题) ,解决方法也是和 6L 的一样的方式,所以感谢各位大佬

之前用 expect 写过登陆堡垒机的脚本,可以参考下:
-f
set timeout 30
登陆堡垒机
spawn ssh op
选择 Group
expect "group:"
sleep .1
send "1\r"
选择 Server
expect "server:"
sleep .1
send "1\r"
提权
expect "login:"
sleep .1
send "sudo -s\r"
sleep .1
ssh server
send "ssh [lindex $argv 0]\r"
sleep .1
interact

数据地带为您的网站提供全球顶级IDC资源