如果在 Expect 脚本中比较字符串的条件
If condition for comparing a string in Expect script
我有一个 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
uname -a
命令输出不仅会包含单词 Linux
或 Aix
,还会包含更多信息。所以,最好使用 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
命令,它只会产生我们确实需要的东西。在这种情况下,您给定的代码可以正常工作。
我有一个 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
uname -a
命令输出不仅会包含单词 Linux
或 Aix
,还会包含更多信息。所以,最好使用 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
命令,它只会产生我们确实需要的东西。在这种情况下,您给定的代码可以正常工作。