在Expect脚本中比较字符串的条件

3

我有一个expect脚本,我想检查uname -a。

如果远程服务器是Linux,则我将使用expect运行几个更多的远程命令。如果是Aix,则我将运行另一组命令。但是,我无法创建if条件语句。请问有谁能帮助我吗?

expect <<'EOF'
spawn ssh user_name@server "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
1个回答

7

uname -a 命令输出不仅包含 LinuxAix 这些单词,还有更多的信息。因此,最好使用 regexp 来检查它是否包含这些单词。

#!/bin/bash
expect <<'EOF'
spawn ssh dinesh@xxx.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

否则,您应该只使用uname命令,它只会生成我们确实需要的内容。在这种情况下,您给出的代码将正常工作。

在开头加上#!/bin/bash是错误的。 - Unknown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接