expect脚本
我们写一个名为test.sh的小脚本,程序的源码如下:
#!/bin/bash
expect_test()
{
read -p "please input data:" data
if [ "${data}x" = "x" ];then
echo "Warning:no data"
ret=1
else
echo "the Date is:${data}"
ret=0
fi
return $ret
}
expect_test
我们写一个expect脚本:
#!/usr/bin/expect
spawn sh test.sh
expect "please input data:"
send "Just for test\n"
expect eof
catch wait result
exit [lindex $result 3]
解释:
第6行:catch wait result
解释:将wait命令的返回值存储到result变量中. result变量并不是一个特殊变量, 你可以随意换一个新名字(比如retVal).
备注:wait命令的返回值是一个"%d %s 0 %d"格式的字符串,第0个值是pid,第1个是spawn_id(不知道它具体带表了什么),第2个应当是代表脚本是否正常完成,第3个是子进程的返回值.
第7行:exit [lindex $result 3]
将result变量(这个变量存储的是一个列表)list中的index=3的那个值取出来,返回它。你可以搜索"Tcl 列表 lindex"以查看详细信息。
脚本运行结果:
怎么在一个shell脚本中嵌进去expect的调用?
例:
#!/bin/bash
expect_test()
{
DATA="$1"
echo "variable is ${DATA}"
echo "will call expect1."
expect -c ' #注意这里要使用单引号,双引号效果不一样
spawn sh test.sh
expect "please input data:"
send '${DATA}'\n
expect eof
catch wait result
exit [lindex $result 3]
'
echo $?
echo "call expect1 finish."
echo ">>>>>>>>>>>>>>>>>>>>"
}
expect_test 120
expect_test
执行结果: