当前位置:首页 » 编程软件 » linux脚本expect

linux脚本expect

发布时间: 2022-03-04 08:52:26

① 如何在shell脚本中调用expect实现自动化

简单的脚本,参考下
要交互的脚本(talk.sh)如下:
#!/bin/bash
echo "Who are you?"
read who
echo "Hello,$who"
echo "Are you happy?"
read answer
echo "why?"
read answer

自动化脚本:
#!/bin/bash

expect<<- END
spawn ./talk.sh
expect "who"
send "firefly\n"
expect "happy?"
send "Yes,I am happy.\n"
expect "why?"
send "Because it worked!\n"
expect eof
exit
END

② 如何在bash shell脚本中使用expect

1、首先检查你机器上有没有expect(我知道ubuntu默认是没有安装的)
ls /usr/bin | grep expect 看看有没有装expect
2、没有的话需要安装
在ubuntu的软件安装中心,搜索tcl 和tk 和expect并安装;
也可以命令行输入sudo apt-get install tcl tk expect
3. 环境ready了后,可以在shell脚本中用Here document的方式使用expect命令
Here document格式如下:
expect <<!
这中间都是expect命令
!
为防止错误,建议都顶格写,前面不要留空格。

③ 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

④ linux下编写sh脚本使用expect问题

在expect {} 括号中间加入{ send \"sh t.sh\r\"; exp_continue } 这样就可以了

⑤ shell中 expect使用

send "pwd" 之后应该继续 expect 一个提示符,或者等待一个 timeout 的时间,然后send 一条命令 touch file1,如此继续。

不考虑 expect 练习的目的的话,完全这个任务最方便的是用 sudo 代替 su,可配置 sudo 执行你这个操作时不用密码。

⑥ 在shell(#!/bin/sh)脚本中怎么使用expect命令,需要添加什么环境变量吗,正确即给分

首先你在命令行执行env expect,看expect能不能用,如果不能用,那么你需要找到expect执行文件路径,加入到PATH环境变量中去。

然后就可以在shell中使用了,有两种方式实现:
1.用here document
2.用expect -c

$cat 1.sh
#!/bin/sh
output=`expect <<EXP
puts "hello world"
EXP
`
echo "expect 1 output:"
echo $output
echo
echo "expect 2 output:"
expect -c 'puts "hello world!"'

$chmod 777 1.sh

$./1.sh
expect 1 output:
hello world

expect 2 output:
hello world!

⑦ expect里如何执行shell脚本

shell编写的except自动化功能有限, 不能做到接口的调用, 对执行的结果很难评估的哦, 建议使用python程序搞定, 楼主上面的需求, 都不是问题, 这个可以帮助搞定, 另外, wo最近开发了一个自动化的批量管理服务器的程序, 里面就有上述功能!如果感兴趣的话, 可以一起讨论一下,看看my网名就行了

⑧ linux下expect脚本问题

#!/usr/bin/expect-f

if{$argc!=1}{
puts"usage:$argv0IP"
exit1
}else{
setIP[lindex$argv0]
}

setpingcmd[format"ping-c100%s"$IP]

settimeout6000

#比如远程用户叫做test
setdestusertest
#比如远程服务器IP为如下
setdestip192.168.0.123
setdestpath"$destuser@$destip"
#比如用户密码叫做test
setdestpasswordtest

#ssh登录
spawnssh$destpath

#######################
expect{
-re".*yes/no.*"{
exp_send"yes "
exp_continue
}
-re".*assword.*"{
exp_send"$destpassword "
}
}

#比如ssh登录以后的提示符是test@Testserver>
expect{
-re".*test@Testserver.*"{
exp_send"$pingcmd "
}
}

expect{
#如果输出timeout字符,则Control+C结束pingcmd
#这里用的是DestinationHostUnreachabl替换timeout。因为本人机器上没有timeout.
-re".*DestinationHostUnreachabl.*"{
#输入Control+c
exp_send"03"

#Control+c后必然输出登录提示符,再输入期望执行的命令
expect{
-re".*test@Testserver.*"{
#假设希望执行的命令是ls
exp_send"ls "
}
}

#执行完ls之后退出
expect{
-re".*test@Testserver.*"{
exp_send"exit "
}
}
}

#如果没有输出timeout字符,退出。
-re".*test@Testserver.*"{
exp_send"exit "
}
}

interact

⑨ linux shell脚本嵌入一段expect

expect -c 用全路径?比如 /usr/bin/expect -c

热点内容
xp共享访问不了 发布:2025-01-20 10:40:05 浏览:945
基恩士plc编程手册 发布:2025-01-20 10:11:30 浏览:909
如何破译小黄车密码 发布:2025-01-20 10:07:39 浏览:434
电脑用什么软件可以模拟安卓应用 发布:2025-01-20 10:07:39 浏览:610
电脑以太网连接服务器通信 发布:2025-01-20 10:00:18 浏览:736
哪里能看自然密码 发布:2025-01-20 09:58:50 浏览:853
股票Al算法 发布:2025-01-20 09:37:11 浏览:78
linuxrcu 发布:2025-01-20 09:30:50 浏览:468
mysqllinux路径配置 发布:2025-01-20 09:28:26 浏览:40
重做系统打开加密文件 发布:2025-01-20 09:26:46 浏览:441