Linux 自动化大神看过来,求助啊

2020-09-10 10:49:16 +08:00
 Number13

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"}
}

3098 次点击
所在节点    Linux
12 条回复
kaikai5601
2020-09-10 10:57:47 +08:00
你把输出传到一个变量里面,然后在判断变量
Number13
2020-09-10 11:05:04 +08:00
@kaikai5601 怎么将回显的字符串存到变量啊 大佬
yorks
2020-09-10 11:37:59 +08:00
ret=`P1`
或者
ret=$(p1)
nuk
2020-09-10 11:52:32 +08:00
出售《 TCL/TK 入门经典》
ungrown
2020-09-10 13:55:28 +08:00
不如用 python
subprocess 直接抓进程的 stdout stderr
然后 if elif else
fcitx
2020-09-10 14:11:25 +08:00
我很菜,但是我不明白为什么要 expect 放到 if 里面?
难道不是:

expect "aaaa" {
send "aCommandLine"
}
expect "bbbb" {
send "bCommandLine"
}
sleepm
2020-09-10 14:15:01 +08:00
参考 https://gist.github.com/prabirshrestha/3080525

UNAME=$(uname)

if [ "$UNAME" == "Linux" ] ; then
echo "Linux"
fi
ly4572615
2020-09-10 14:32:57 +08:00
我完全没有用过 expect,直接到了 ansible 时代
wangyzj
2020-09-10 14:49:40 +08:00
```
#!/bin/bash
auto_login_ssh () {
expect -c "set timeout 6;
spawn -noecho scp -o StrictHostKeyChecking=no /home/appadmin/.ssh/id_rsa.pub $2@$3:/home/$2/.ssh/authorized_keys;
expect *assword:*;
send -- $1\r;
expect *id_rsa.pub*;
sleep 3;
expect *denied*;
exit;
interact;";
}
auto_login_ssh $1 $2 $3
```

供参考
Number13
2020-09-10 17:53:41 +08:00
@fcitx 或许你这个方法是对的,我最后也是采用这种方法
Number13
2020-09-10 17:55:34 +08:00
感谢各位,结帖了,各位提供的是 shell + expect 我指的是 纯 expect 脚本(本人问题描述有问题) ,解决方法也是和 6L 的一样的方式,所以感谢各位大佬
lrvy
2020-09-10 18:04:11 +08:00
之前用 expect 写过登陆堡垒机的脚本,可以参考下:

#!/usr/bin/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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/705721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX