Se la condizione per confrontare una stringa in script Expect

Ho un script expect cui voglio controllare uname -a.

se il server remoto è Linux quindi mi metto a correre ancora qualche comando remoto utilizzando aspettare. Se è Aix poi mi metto a correre qualche altro set di comandi. Tuttavia, non sono in grado di creare la condizione if. Uno può aiutarmi, per favore?

expect <<'EOF'
spawn ssh [email protected] "uname -a"
set count 0
expect {
"password:" {
send password\r
exp_continue
}
"Permission denied" {
    incr count
    exp_continue
  }
}
set strname LINUX

set results $expect_out(buffer)

if {$strname == $results}
{
puts $results
}
EOF
InformationsquelleAutor ram | 2015-10-16



One Reply
  1. 5

    Il uname -a output del comando, non solo la parola Linux o Aix, ma anche il più info. Quindi, sarebbe meglio usare regexp per verificare se se contiene la parola.

    #!/bin/bash
    expect <<'EOF'
    spawn ssh [email protected].xxx.xx.xxx "uname -a"
    set count 0
    expect {
        timeout {puts "timeout happened"}
        eof {puts "eof received"}
        "password:" {send "password\r";exp_continue}
        "Permission denied" {incr count;exp_continue}
    }
    
    set results $expect_out(buffer)
    
    if {[regexp -nocase "Linux" $results]} {
            puts "It is a Linux Machine"
    } elseif {[regexp -nocase "Aix" $results]} {
            puts "It is a AIX machine"
    } else {
            puts "Unknown machine"
    }
    EOF

    Altro, si dovrebbe utilizzare uname comando da soli che si produce solo ciò che è effettivamente necessario per noi. In questo caso, il tuo codice funziona bene.

    • Grazie mille Dinesh.. funziona..

Lascia un commento