Ⅰ 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 更方便,供参考。
Ⅱ SFTP取远程服务器取文件到本地
最简单的办法就是装两个系统一个linux再装个windows或者把文件上传到网络上然后当下来.再不行找个移动硬盘直接拷贝了寄过去就可以了
Ⅲ 在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!
Ⅳ 求shell脚本~~!关于自动取远程服务器的文件到本地的脚本~最好带注释哈~
a. 至少有三种在外通用:(1)setup $HOME/.rhosts for rcp, remsh 等等(2)setup $HOME/.netrc for ftp(3)ssh,scp要判断文件是否下载成功,最简单的就是用check sum (Linux/Unix的通用command是 cksum)。好比你用个script去scp file回来后,应该也执行一个ssh去远端做个cksum,把cksum的output存起来,回到local做同样的cksum,两个一比较就知道了。按理说,这些利用tcp/ip的protocol写的自动会做error checking而且要是有error自动会re-transmit,不过你还是要考虑local的file system是不是爆了等等,所以最简单的做法就是两边都做cksum一比就知道了。
Ⅳ Linux交互expect 的使用
#!/usr/bin/expect set time 30 set passwd xxxxx (xxxx是你的密码来内容) spawn sudo expect "Password:" 引号里源是你手动执行sudo时候 。系统返回给你的提示,可以只匹配最后几个字母, 也可以写全 send "$passwd\r" expect eof EOF
Ⅵ 如何用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] 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行
Ⅶ expect 中取当前用户目录,举例:如果当前用户名是xiexie, 要求在/home/xiexie 中建一文件
你好!请确认在浏览器里输入192.168.1.1,是否出现用户名和密码的输入框。如果出现,输入admin,admin登录失败,那说明密码被改过。这种情况下,建议复位路由器(不同厂家的路由器的复位方法略有差异,请参考路由器使用说明。复位之后,通过默认的用户名和密码都是admin,即可进入路由器界面。)
Ⅷ 怎样把expect的执行结果输出到一个文件中
ping命令的最后用管道命令>>e:\1.txt,如pingg.cn>>e:\1.txt,注意>>前面有空格,后面没有。>>e:\1.txt就是把显示输出写入到e:\1.txt文件中,一个>会覆盖前面的内容的,用>>,就能把后面的命令输出内容追加到e:\1.txt文件中。
Ⅸ Linux 多台服务器循环进入目录进行文件传输
写个脚本循环
假如你目录在tmp 文件也在tmp下
forIPin{1..100}doSERVER="192.168.0.${IP}"DIR="192.168.0.${IP}"[email protected]${SERVER}:/tmp/A/tmp/${DIR}done
不过这样的前提是 你已经做了公用机与这100台机器的无需密码的访问
当然 你可以用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 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