expect 简单用法

来源:互联网 发布:网络摄像头ip地址查询 编辑:程序博客网 时间:2024/05/18 03:18

参考于:http://www.nginx.cn/1934.html
先安装expect
CentOS: yum install expect
Ubuntu: apt-get install expect

#!/usr/bin/expectset timeout 30spawn ssh user@localhostexpect {    "(yes/no)" {        send "yes\r"; exp_continue     }    "*assword" {        send "123456\r"    }}spawn lsexpect eof#interact

expect使用的是TCL语法。
一条Tcl命令由空格分割的单词组成. 其中, 第一个单词是命令名称, 其余的是命令参数 cmd arg1 arg2 arg3

set timeout 30: 设置超时 单位是秒。 -1为永不超时

expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了。

interact: 执行后处于交互状态。

expect eof: 与spawn对应表示捕获终端输出信息终止,类似于if….endif.

#!/usr/bin/expect# script name : testExpect.shset timeout 30set host localhostset username userset password 123456set src_file [lindex $argv 0]set dest_file [lindex $argv 1]spawn scp $src_file $username@$host:$dest_fileexpect {    "(yes/no)" {        send "yes\n"        expect "*assword" { send "$password\n"}    }    "*assword" {        send "$password\n"    }}expect "100%"expect eof

在命令行执行 ./testExpect.sh testExpect.sh /home/user/expect.sh

$符号代表变量的值. 在本例中, $username@$host:$dest_file.
$argv 0: 从命令行读取第一个参数 本例中 testExpect.sh
$argv 1: 从命令行读取第二个参数 本例中 /home/user/expect.sh

方括号执行了一个嵌套命令. 例如, 如果你想传递一个命令的结果作为另外一个命令的参数, 那么你使用这个符号 [cmd arg]

双引号把词组标记为命令的一个参数. “$”符号和方括号在双引号内仍被解释 “some stuff”

大括号也把词组标记为命令的一个参数. 但是, 其他符号在大括号内不被解释 {some stuff}

反斜线符号是用来引用特殊符号. 例如:n 代表换行. 反斜线符号也被用来关闭”$”符号, 引号,方括号和大括号的特殊含义

expect 调用shell命令

Conf

USER=user1PASS=123456

a.exp

#!/usr/bin/env expectset PASS [ exec grep "PASS" Conf | cut -d= -f2 ]puts $PASS
0 0
原创粉丝点击