如何在expect脚本中使用if条件中的变量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在expect脚本中使用if条件中的变量?相关的知识,希望对你有一定的参考价值。

我正在远程主机上执行expect脚本(比如A),我想从该远程主机(A)获取一些环境变量。根据远程主机的(A)环境变量,我想在该主机(A)和运行期望脚本的主机(B)上执行一些条件操作。

我可以获取远程变量并在远程变量中设置值。我无法执行if条件,因为我有问题找出正确的语法/格式。

尝试了谷歌参考文献中的一些,但无法真正接近一个有效的解决方案。

send "export vers=`rpm -q --queryformat '%RELEASE' rpm | grep -o '.$'`\r"
send "echo \$vers\r"
expect -re $prompt
send "`if [[ \$vers -lt 7 ]]; then echo 'RHEL Version is \$vers'; else echo 'RHEL Version is \$vers'; fi`\r"

得到以下错误:

invalid command name "$vers"
    while executing
"\$vers -lt 7 "
    invoked from within
"[ \$vers -lt 7 ]"
    invoked from within
"send "`if [[ \$vers -lt 7 ]]; then echo 'RHEL Version is \$vers'; else echo 'RHEL Version is \$vers'; fi`\r""

需要expect脚本正确执行“if”条件并将值传递给远程主机和本地。

答案

你可以关注@ glenn-jackman建议的所有内容。还要检查单引号。如果您使用bash,可能需要用双引号替换它们。检查一下:http://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html也。

另一答案

expect是的扩展,Tcl使用方括号与shell使用反引号的方式相同:命令替换。您需要转义双引号字符串中的括号:

send "if \[\[ \$vers -lt 7 \]\]; then echo 'RHEL Version is \$vers'; else echo 'RHEL Version is \$vers'; fi\r"

或者,使用Tcl的非插值引用机制来避免反斜杠:

send if [[ $vers -lt 7 ]]; then echo 'RHEL Version is $vers'; else echo 'RHEL Version is $vers'; fi
send "\r"

Tcl中的大括号就像贝壳的单引号一样。

请注意,我从命令中删除了反引号。

qclxswpoi描述了Tcl语言的完整语法 - 只有12条规则。此问答涉及规则4,6和7,以及切线8和9。

以上是关于如何在expect脚本中使用if条件中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本中的if中多条件语句如何写。

shell 编程进阶与自动化脚本expect的运用

Shell脚本(条件测试&IF判断)——理论篇2

(24)Poweshell中的if条件判断

如何从另一个if条件中的一个if条件中获取变量的值?

如何解决 SAS中 LAG不能在条件语句中使用的问题!