expect返回值给shell_expect执行的结果返回值使用

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值