shell expect 异常记录

1.expect语法:

expect 是基于tcl 演变而来的,所以很多语法和tcl 类似,基本的语法如下所示:
1.1 首行加上/usr/bin/expect
1.2 spawn: 后面加上需要执行的shell 命令,比如说spawn sudo touch testfile
1.3 expect: 只有spawn 执行的命令结果才会被expect 捕捉到,因为spawn 会启
动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提
示信息,eof 和timeout。
1.4 send 和send_user:send 会将expect 脚本中需要的信息发送给spawn 启动
的那个进程,而send_user 只是回显用户发出的信息,类似于shell 中的echo 而
已。

2.例子

下面是一个shell 中嵌入expect建立反向代理的例子

调用方法:/usr/local/src/autossh.sh 7293 20001 5977 test password test.xxx.cn

#!/bin/bash
expect <<HERE
set timeout 60
spawn autossh -M $1 -NR "*:$2:*:$3" $4@$6
expect {
        "yes/no*" {
                send "yes\n"; exp_continue
        }
         "password:" {
                send "$5\n"; exp_continue
        }
        eof {
                exit
        }
}
HERE

注意点:

1.默认情况下,expect 语法timeout 是10 秒,如果到了代码中没有指定的异常,则在等待10秒后该脚本的执行会自动终止。

2.如果连续做两个expect,那么实际上是串行执行的。

3.用{ }括起来  则是并行,expect 与“{ ”之间直接必须有空格或则TAB间隔,否则会出麻烦。

4.使用exp_continue后,会重新从当前expect块的开始重新执行,可以简单理解问while循环的continue


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值