1. expect脚本中创建文件且追加内容应该怎么写
1、首先检查你机器上有没有expect(我知道ubuntu默认是没有安装的) ls /usr/bin | grep expect 看看有没有装expect 2、没有的话需要安装 在ubuntu的软件安装中心,搜索tcl 和tk 和expect并安装; 也可以命令行输入sudo apt-get install tcl tk …
2. 在shell(#!/bin/sh)脚本中怎么使用expect命令,需要添加什么环境变量吗,正确即给分
首先你在命令行执行env expect,看expect能不能用,如果不能用,那么你需要找到expect执行文件路径,加入到PATH环境变量中去。然后就可以在shell中使用了,有两种方式实现:1.用here document2.用expect -c$cat 1.sh #!/bin/sh output=`expect <<EXP puts "hello world"EXP` echo "expect 1 output:"echo $output echoecho "expect 2 output:"expect -c 'puts "hello world!"'$chmod 777 1.sh $./1.sh expect 1 output:hello worldexpect 2 output:hello world!
3. 关于expect的问题,如何获取目录中最新的文件
send "ls -t|head -1\r"expect -re {(.*)\r}
4. expect怎样逐行执行,还有-d怎样使用大佬们具体点
如果你是expect脚本语言的新手,可以首先从我们的expect的“helloworld”样例(英文)开始。1,使用“-c”选项,从命令行执行expect脚本expect可以让你使用“-c”选项,直接在命令行中执行它,如下所示:$expect-c'expect"\n"{send"pressedenter\n"}pressedenter$如果你执行了上面的脚本,它会等待输入换行符(\n)。按“enter”键以后,它会打印出“pressedenter”这个消息,然后退出。2,使用“-i”选项交互地执行expect脚本使用“-i”选项,可以通过来自于标准输入的读命令来交互地执行expect脚本。如下所示:$expect-iarg1arg2arg3expect1.1>setargvarg1arg2arg3expect1.2>正常情况下,当你执行上面的expect命令的时候(没有“-i”选项),它会把arg1当成脚本的文件名,所以“-i”选项可以让脚本把多个参数当成一个连续的列表。当你执行带有“-c”选项的expect脚本的时候,这个选项是十分有用的。因为默认情况下,expect是交互地执行的。3,当执行expect脚本的时候,输出调试信息当你用“-d”选项执行代码的时候,你可以输出诊断的信息。如下所示:$catsample.exp#!/usr/bin/expect-fexpect"\n";send"pressedenter";$expect-dsample.expexpectversion5.43.0argv[0]=expectargv[1]=-dargv[2]=sample.expsetargc0setargv0"sample.exp"setargv"".expexpect:does""(spawn_idexp0)matchglobpattern"\n"?noexpect:does"\n"(spawn_idexp0)matchglobpattern"\n"?yesexpect:setexpect_out(0,string)"\n"expect:setexpect_out(spawn_id)"exp0"expect:setexpect_out(buffer)"\n"send:sending"pressedenter"to{exp0pressedenter}4,使用“-D”选项启动expect调试器“-D”选项用于启动调试器,它只接受一个布尔值的参数。这个参数表示提示器必须马上启动,还是只是初始化调试器,以后再使用它。$expect-D1script“-D”选项左边的选项会在调试器启动以前被处理。然后,在调试器启动以后,剩下的命令才会被执行。$expect-c'settimeout10'-D1-c'seta1'1:seta1dbg1.0>5,逐行地执行expect脚本通常,expect会在执行脚本之前,把整个脚本都读入到内存中。“-b”选项可以让expect一次只读取脚本中的一行。当你没有写完整个脚本的时候,这是十分有用的,expect可以开始执行这个不完整的脚本,并且,它可以避免把脚本写入到临时文件中。$expect-b6,让expect不解释命令行参数你可以使用标识符让expect不解释命令行参数。你可以像下面这样的读入命令行参数:$catprint_cmdline_args.exp#!/usr/bin/expectputs'argv0:[lindex$argv0]';puts'argv1:[lindex$argv1]';当执行上面的脚本的时候,会跳过命令行选项,它们会被当成参数(而不是expect选项),如下所示:$expectprint_cmdline_args.exp-d-cargv0:-dargv1:-c
5. 怎样把expect的执行结果输出到一个文件中
ping命令的最后用管道命令>>e:\1.txt,如pingg.cn>>e:\1.txt,注意>>前面有空格,后面没有。>>e:\1.txt就是把显示输出写入到e:\1.txt文件中,一个>会覆盖前面的内容的,用>>,就能把后面的命令输出内容追加到e:\1.txt文件中。
6. 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 arg3expect1.1>set argvarg1 arg2 arg3expect1.2>正常情况下,当你执行上面的expect命令的时候(没有“-i”选项),它会把arg1当成脚本的文件名,所以“-i”选项可以让脚本把多个参数当成一个连续的列表。当你执行带有“-c”选项的expect脚本的时候,这个选项是十分有用的。因为默认情况下,expect是交互地执行的。3,当执行expect脚本的时候,输出调试信息当你用“-d”选项执行代码的时候,你可以输出诊断的信息。如下所示:$ cat sample.exp# !/usr/bin/expect -fexpect "\n";send "pressed enter";$ expect -d sample.expexpect version 5.43.0argv[0] = expect argv[1] = -d argv[2] = sample.expset argc 0set argv0 "sample.exp"set argv ""executing commands from command file sample.expexpect: does "" (spawn_id exp0) match glob pattern "\n"? noexpect: does "\n" (spawn_id exp0) match glob pattern "\n"? yesexpect: 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 1dbg1.0>5,逐行地执行expect脚本通常,expect会在执行脚本之前,把整个脚本都读入到内存中。“-b”选项可以让expect一次只读取脚本中的一行。当你没有写完整个脚本的时候,这是十分有用的,expect可以开始执行这个不完整的脚本,并且,它可以避免把脚本写入到临时文件中。$ expect -b6,让expect不解释命令行参数你可以使用标识符让expect不解释命令行参数。你可以像下面这样的读入命令行参数:$ cat print_cmdline_args.exp#!/usr/bin/expectputs 'argv0 : [lindex $argv 0]';puts 'argv1 : [lindex $argv 1]';当执行上面的脚本的时候,会跳过命令行选项,它们会被当成参数(而不是expect选项),如下所示:$ expect print_cmdline_args.exp -d -cargv0 : -dargv1 : -c
7. 如何用expect读文件
你是说shell的expect么,我有个ssh自动登录的脚本,你看下 1. [#!/usr/bin/expect] 2. [set timeout 30] 基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒 3. [spawn ssh -l username 192.168.1.1] spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。 它主要的功能是给ssh运行进程加个壳,用来传递交互指令。 4. [expect "password:"] 这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒 5. [send "ispass\r"] 这里就是执行交互动作,与手工输入密码的动作等效。 温馨提示: 命令字符串结尾别忘记加上 “\r”,如果出现异常等待的状态可以核查一下。 6. [interact] 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行
8. linux下用expect spawn时的问题
*.log 是shell中的用法,scp或者其他命令本身并不直接将 * 替换成匹配的多个文件名。建议你版将 expect 脚本做权成一次只上传一个文件,这个文件名由输入参数来决定scp [lindex $argv 0] [email protected]:/homeexpect "password:" {send "1111111\n"}interact然后再写一个bash脚本,脚本调用上面的expect脚本来上传所有的文件,如:for f in `ls /log/*.log`do expect_script /log/$fdone即可。 另,像这种备份文件,用 rsync 更方便,供参考。
9. linux expect讲解怎么使用
[[email protected] PYTHON_TEST]# rpm -ql expect package expect is not installed 查看是否有安装,如果没有安装安装一个即可。 yum install expect*