Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Number13
V2EX  ›  Linux

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

  •  
  •   Number13 · Sep 10, 2020 · 4076 views
  •   You need to sign in to view this topic
    This topic created in 2143 days ago, the information mentioned may be changed or developed.

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

    12 replies    2020-09-10 18:04:11 +08:00
    kaikai5601
        1
    kaikai5601  
       Sep 10, 2020
    你把输出传到一个变量里面,然后在判断变量
    Number13
        2
    Number13  
    OP
       Sep 10, 2020
    @kaikai5601 怎么将回显的字符串存到变量啊 大佬
    yorks
        3
    yorks  
       Sep 10, 2020
    ret=`P1`
    或者
    ret=$(p1)
    nuk
        4
    nuk  
       Sep 10, 2020
    出售《 TCL/TK 入门经典》
    ungrown
        5
    ungrown  
       Sep 10, 2020
    不如用 python
    subprocess 直接抓进程的 stdout stderr
    然后 if elif else
    fcitx
        6
    fcitx  
       Sep 10, 2020
    我很菜,但是我不明白为什么要 expect 放到 if 里面?
    难道不是:

    expect "aaaa" {
    send "aCommandLine"
    }
    expect "bbbb" {
    send "bCommandLine"
    }
    sleepm
        7
    sleepm  
       Sep 10, 2020
    参考 https://gist.github.com/prabirshrestha/3080525

    UNAME=$(uname)

    if [ "$UNAME" == "Linux" ] ; then
    echo "Linux"
    fi
    ly4572615
        8
    ly4572615  
       Sep 10, 2020
    我完全没有用过 expect,直接到了 ansible 时代
    wangyzj
        9
    wangyzj  
       Sep 10, 2020
    ```
    #!/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
        10
    Number13  
    OP
       Sep 10, 2020
    @fcitx 或许你这个方法是对的,我最后也是采用这种方法
    Number13
        11
    Number13  
    OP
       Sep 10, 2020
    感谢各位,结帖了,各位提供的是 shell + expect 我指的是 纯 expect 脚本(本人问题描述有问题) ,解决方法也是和 6L 的一样的方式,所以感谢各位大佬
    lrvy
        12
    lrvy  
       Sep 10, 2020
    之前用 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
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2750 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 12:08 · PVG 20:08 · LAX 05:08 · JFK 08:08
    ♥ Do have faith in what you're doing.