"expect" 这个工具在写一些脚本的时候比较有用,可以自动化与脚本中调用的程序进行互动操作。
网上很多例子了,比如写一个脚本进行SSH登陆阿,等等。。。
这里给一个小例子,看看它最基本的功能。
1、一个非常简单的shell程序"my_pgm.sh",用于模拟一个被调用的应用程序。
-
#!/bin/sh
-
echo ">>>> START: "
-
echo "A:"
-
read var_01
-
echo "---- 1st input: $var_01----"
-
-
echo "B:"
-
read var_02
-
echo "---- 2nd input: $var_02----"
-
echo "<<<<< End <<<<"
2、一个expect程序"my_exp.exp",用于与"my_pgm.sh"进行互操作。
-
#!/usr/bin/expect
-
set timeout -1
-
-
spawn ./my_pgm.sh
-
-
expect "A:"
-
send "Hello, I'm Mike\n"
-
expect "B:"
-
send "Bye!\n"
-
-
expect eof
-
exit
3、一个客户shell程序,通过调用"my_exp.exp"达到调用"my_pgm.sh"效果。
执行一下吧:
-
[who_r_u]$ ./call_my_pgm.sh
-
spawn ./my_pgm.sh
-
>>>> START:
-
A:
-
Hello, I'm Mike
-
---- 1st input: Hello, I'm Mike----
-
B:
-
Bye!
-
---- 2nd input: Bye!----
-
<<<<< End <<<<
再写一个最简单的应用吧:
-
#!/usr/bin/expect
-
spawn tmadmin
-
expect ">"
-
send "printserver\n"
-
expect ">"
-
send "printservice\n"
-
expect ">"
-
send "quit\n"
-
expect eof
-
exit
直接执行一下这个expect脚本:
-
[who_r_u]$ ./get_status.exp
-
spawn tmadmin
-
tmadmin - Copyright (c) 1996-2012 Oracle.
-
Portions * Copyright 1986-1997 RSA Data Security, Inc.
-
All Rights Reserved.
-
Distributed under license by Oracle.
-
Tuxedo is a registered trademark.
-
-
> printserver
-
Prog Name Queue Name Grp Name ID RqDone Load Done Current Service
-
--------- ---------- -------- -- ------ --------- ---------------
-
BBL 154654 simple 0 0 0 ( IDLE )
-
simpserv 00001.00001 GROUP1 1 0 0 ( IDLE )
-
-
> printservice
-
Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
-
------------ ------------ --------- -------- -- ------- ------ ------
-
TOUPPER TOUPPER simpserv GROUP1 1 simple 0 AVAIL
-
-
> quit
-
[who_r_u]$
这种脚本简单实用,尤其是在自动化操作上很有帮助。
阅读(2603) | 评论(0) | 转发(0) |