当前位置:首页 » 操作系统 » linuxexpect用法

linuxexpect用法

发布时间: 2023-08-29 07:28:38

⑴ 关于linux expect脚本的问题,自动输入密码

#!/usr/bin/expect

set time 30
set passwd xxxxx (xxxx是你的密码内容)

spawn sudo
expect "Password:" 引号里是你手动执行sudo时候 。系统返回给你的提示,可以只匹配最后几个字母,
也可以写全
send "$passwd\r"
expect eof

EOF

⑵ linux expect问题

#!/usr/bin/expect

set timeout 10
set host_ip [lindex $argv 0]
set password [lindex $argv 1]

spawn ssh ${host_ip}
expect {
"(yes/no)?"
{
send "yes\n"
expect "*assword:" { send "$password\n"}
}
"*assword:"
{
send "$password\n"
}
timeout {exit 1} # 3: 这里超时就会返回 1
}
expect "100%" # 1: 等待 被spawn的程序(即前面的 ssh ${host_ip})输出 100%
expect eof # 2: 等待被spawn的程序结束

4: 可能是 ssh 本身慢导致的

⑶ linux的expect代码,发现如果不加interact,则send命令好像没有执行,如果加上interact命令才执行。

常见的做法是将interact换成 expect eof ,从而可以捕获到spawn命令启动的进程的结束状态。
如果坚持使用interact可以在命令执行完成后依然保持在登陆在远程服务器上,可以直接手工敲命令进行交互,完成后续工作,最后需要exit退出ssh远程登陆。
至于去掉interact却没有使用expect eof的情况下send没有执行的问题,主要是因为因为spawn会启动一个进程,但是没有捕获匹配eof或者time out事件造成的

⑷ expect脚本在Linux下是如何使用的

如果你是expect脚本语言的新手,可以首先从我们的expect的“hello world”样例(英文)开始。
1,使用“-c”选项,从命令行执行expect脚本
expect可以让你使用“-c”选项,直接在命令行中执行它,如下所示:
$ expect -c 'expect "\n" {send "pressed enter\n"}

pressed enter
$

如果你执行了上面的脚本,它会等待输入换行符(\n)。按“enter”键以后,它会打印出“pressed enter”这个消息,然后退出。
2,使用“-i”选项交互地执行expect脚本
使用“-i”选项,可以通过来自于标准输入的读命令来交互地执行expect脚本。如下所示:
$ expect -i arg1 arg2 arg3
expect1.1>set argv
arg1 arg2 arg3
expect1.2>

正常情况下,当你执行上面的expect命令的时候(没有“-i”选项),它会把arg1当成脚本的文件名,所以“-i”选项可以让脚本把多个参数当成一个连续的列表。
当你执行带有“-c”选项的expect脚本的时候,这个选项是十分有用的。因为默认情况下,expect是交互地执行的。
3,当执行expect脚本的时候,输出调试信息
当你用“-d”选项执行代码的时候,你可以输出诊断的信息。如下所示:
$ cat sample.exp
# !/usr/bin/expect -f
expect "\n";
send "pressed enter";

$ expect -d sample.exp
expect version 5.43.0
argv[0] = expect argv[1] = -d argv[2] = sample.exp
set argc 0
set argv0 "sample.exp"
set argv ""
executing commands from command file sample.exp

expect: does "" (spawn_id exp0) match glob pattern "\n"? no

expect: does "\n" (spawn_id exp0) match glob pattern "\n"? yes
expect: set expect_out(0,string) "\n"
expect: set expect_out(spawn_id) "exp0"
expect: set expect_out(buffer) "\n"
send: sending "pressed enter" to { exp0 pressed enter}
4,使用“-D”选项启动expect调试器
“-D”选项用于启动调试器,它只接受一个布尔值的参数。这个参数表示提示器必须马上启动,还是只是初始化调试器,以后再使用它。
$ expect -D 1 script

“-D”选项左边的选项会在调试器启动以前被处理。然后,在调试器启动以后,剩下的命令才会被执行。
$ expect -c 'set timeout 10' -D 1 -c 'set a 1'
1: set a 1
dbg1.0>

5,逐行地执行expect脚本
通常,expect会在执行脚本之前,把整个脚本都读入到内存中。“-b”选项可以让expect一次只读取脚本中的一行。当你没有写完整个脚本的时候,这是十分有用的,expect可以开始执行这个不完整的脚本,并且,它可以避免把脚本写入到临时文件中。
$ expect -b

6,让expect不解释命令行参数
你可以使用标识符让expect不解释命令行参数。
你可以像下面这样的读入命令行参数:
$ cat print_cmdline_args.exp
#!/usr/bin/expect
puts 'argv0 : [lindex $argv 0]';
puts 'argv1 : [lindex $argv 1]';

当执行上面的脚本的时候,会跳过命令行选项,它们会被当成参数(而不是expect选项),如下所示:
$ expect print_cmdline_args.exp -d -c
argv0 : -d
argv1 : -c

热点内容
android监听输入法状态 发布:2025-02-01 07:52:44 浏览:280
android仿58 发布:2025-02-01 07:52:41 浏览:889
ubuntu解压zip文件 发布:2025-02-01 07:52:39 浏览:223
红色物业竞赛视频脚本 发布:2025-02-01 07:39:56 浏览:715
我的世界领域服务器 发布:2025-02-01 07:30:06 浏览:156
线性表有哪两种存储结构 发布:2025-02-01 07:30:04 浏览:216
坡向压缩机 发布:2025-02-01 07:09:10 浏览:410
夏新手机初始密码是什么 发布:2025-02-01 06:58:23 浏览:790
ppt存储路径 发布:2025-02-01 06:55:06 浏览:115
aspx脚本 发布:2025-02-01 06:44:13 浏览:999