test.sh 调用test.exp执行dir.sh,判断dir.sh的返回值
如下:
test.exp文件:
#!/usr/bin/expect -f
set TARGET [lindex $argv 0]
set NUM [lindex $argv 1]
#set PWD [lindex $argv 2]
set USER "123"
set PASSWD "123"
set PASSWDcon "123"
set CON_IP "10.30.41.22"
set timeout 60
set PWD "/home/123"
set HOSTNAME "123@123"
spawn ssh $USER@$CON_IP
expect {
"*yes/no" {send "yes\r";
exp_continue}
"*password:" {send
"$PASSWD\r"}
}
expect "*$HOSTNAME*" {send "cd $PWD \r"}
expect "*$HOSTNAME*" {send "./dir.sh \r"} //判断该dir.sh中一个函数执行结果,如返回值是14,则结束后面的运行。
sleep 60
expect "*$HOSTNAME*" {send "exit\r"}
expect eof
catch wait result //等待返回值
exit [lindex $result 3] //取到返回值,并作为整个test.exp的返回值。
解释:
catch wait
result
解释:将wait命令的返回值存储到result变量中.
result变量并不是一个特殊变量, 你可以随意换一个新名字(比如retVal).
备注:wait命令的返回值是一个"%d
%s 0
%d"格式的字符串,第0个值是pid,第1个是spawn_id(不知道它具体带表了什么),第2个应当是代表脚本是否正常完成,第3个是子进程的返回值.
exit [lindex
$result 3]
将result变量(这个变量存储的是一个列表)list中的index=3的那个值取出来,返回它。你可以搜索"Tcl
列表 lindex"以查看详细信息。
dir.sh:
#!/bin/bash
if [ ! -d "/data/"];then
mkdir/data
else
exit 14//退出并返回值14,给test.exp
fi
判断test.exp的返回值,是否继续执行:
test.sh:
#!/bin/bash
for i in {0..999}
do
expect test.exp
if [ $? -eq 14 ] ;then //这里的$?为test.exp的返回值,如果是14的话,就不再运行。
exit
fi
sleep 120
done