Linux expect详解 2018-07-11 分类:Linux Shell / 系统运维 / 编程开发 阅读(6670) 评论(0) 随处可见的expect 第一次见expect这个命令还是我第一次参加全量上线的时候...实在是看不懂这个expect命令的用法,所以就找时间总结了这篇关于expect命令的文章。...先抛出一个问题 现在有两台Linux主机A和B,如何从A主机ssh到B主机,然后在B主机上执行命令,如何使这个过程实现全程自动化?...这就要用到今天这篇文章总结的expect了。 expect是什么? expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。...":设置变量; spawn ssh $username@$host:spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn
1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect...获取上一命令执行后的返回信息,如果匹配成功 则执行后续操作 spawn 交互程序开始后面跟命令 set 定义变量 puts...输出变量 set timeout 设置超时时间 send 用于发送字符串或者命令 exit 退出expect脚本 eof.../usr/bin/expect #获取参数并设置局部变量 set timeout 15 set BASE_PATH [lindex $argv 0] set FILE_NAME [lindex $argv.../usr/bin/expect spawn sftp -oPort=16022 sftp@192.168.12.32 expect "\*assword\*" send "Password\r" expect
在Linux系统中,expect 是一款非常有用的工具,它允许用户自动化与需要用户输入进行交互的程序。本文将深入探讨expect命令的基本语法、使用方法以及一些最佳实践。...linux-expect.jpg 什么是Expect命令? expect 是一个用于自动化交互式进程的工具。它的主要功能是根据程序的输出模式(patterns)发送输入,从而实现自动化交互。...expect eof': 这表示脚本会等待子进程的结束(eof 表示 end of file)。一旦子进程结束,整个 expect 脚本也就结束了。...错误处理 使用 expect_before 和 expect_after 处理在其他期望之前或之后出现的常见模式,提高脚本的健壮性。 以下是一个简单的expect脚本,用于自动化SSH登录 #!...expect "$ " send "ls\n" expect "$ " send "exit\n" 脚本执行过程如下 _20231202223700.jpg 总结 expect命令是Linux系统中一个非常实用的工具
expect自动交互流程: spawn启动指定进程 expect获取指定关键字 send向指定程序发送指定字符 执行完成退出. 注意该脚本能够执行的前提是安装了 expect。...四个命令 Expect中最关键的四个命令是send,expect,spawn,interact。...expect执行结束 退出 set 定义变量 puts 输出变量 set timeout 设置超时时间 使用示例 下面以我最近使用的脚本来一行行进行分析...set user root # 设置 变量user set pass 123456 # 设置 变量pass set dir /data/pgsql_bak_data set...Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/about-linux-expect
expect 自动交互流程: spawn 启动指定命令 > expect 获取指定关键字 > send 发送指定字符串 > 执行完成退出。...注意 expect 脚本能够执行需要提前安装 expect,一般系统默认没有此命令。...-v 显示 expect 版本信息。 4.子命令 expect 使用 TCL(Tool Command Language)。...exit [-opts] [status] 退出 expect 脚本。 set timeout N 设置超时时间为 N 秒。 set 定义变量。 puts 输出变量。...} "password" { send "root\n" } } expect eof ---- 参考文献 expect(1) - Linux manual page - man7.org
在做日志分析工具时,发现在屏幕上拿到日志结果会有点慢,然后查了一下expect ssh timeout的设置,原来是这里有个默认时间的问题,所以整理一下: expect脚本我们都知道,首先spawn我们要执行的命令...,然后就给出一堆expect的屏幕输出,如果输出match了我们的expect的东西,我们就会send一个命令上去,模拟用户输入。...但是expect中等待命令的输出信息是有一个timeout的设定的,默认是10秒。这个特性是防止那些执行死机的命令的。...一旦到了这个timeout,还是没有屏幕输出的话,expect脚本中下面的代码就会执行。或者我们在expect脚本中如果定义了timeout的响应代码的话,这些代码就会被执行。 ...解决这样的问题非常简单,最简单的办法就是在expect脚本的开头定义: set timeout -1 -- 没有timeout set timeout XX -- 设定具体的timeout时间(秒)
**** expect是Linux脚本编程工具语言,用来实现自动和交互式任务进行通信,从而不用手动处理。...---- ****expect安装**** $sudo apt-get install expect ---- ****简单使用**** #!.../usr/bin/expect # ---------- 配置信息开始---------- #变量 set password heiheiPsd # expect脚本设置 set timeout -...--------expect结束---------- ---- Linux运维基础且常用命令 Linux之crontab定时任务 Linux之sed文本处理命令 Linux之ps进程查看命令 Linux...之expect交互语言命令 Linux之tail命令 ----
所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。 expect脚本远程登录 yum install -y expect 自动远程登录 #!...expect脚本远程执行命令 自动远程登录后,执行命令并退出 #!.../usr/bin/expect set user "root" set passwd "123456" spawn ssh $user@192.168.133.132 expect { "yes/no...\r" expect "]*" send "echo 1212 > /tmp/12.txt\r" expect "]*" send "exit\r" expect “]*” 表示图中括号里的,表示当检测到这个符号时就执行我们要执行的命令...expect脚本传递参数 传递参数 #!
第1章 expect 概括 expect 期待 expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet...shell脚本中的变量需要对于expect中的变量. 2.1 使用例子 2.2 首先安装expect [shell] Centos OS yum 安装 yum install -y expect Ubuntu...ssh 192.20.3.99 mkdir /home/tbt/webappdata/backup/date # spawn后面加上需要执行的shell命令、其中date 是加的shell脚本中的时间变量...} expect eof [/shell] 注意:expect脚本必须以expect eof结束。...bin/sh ##################### #by xuebao #2017.05.27 ##################### date=`date +%Y%m%d` #定义了一个时间变量
里面有给变量赋值的 set 命令,控制程序执行的 if, for, continue 等命令,还能进行普通的数学和字符串操作。...被精确匹配的字符串(或者当超时发生时,已经读取但未进行匹配的字符串)被存贮在变量 expect_match 里面。...工具安装 源代码和下载地址都是由 Linux 软件基金会维护的(sourceforge) # 因为Expect需要Tcl编程语言的支持 $ sudo yum install -y gcc $ sudo..." # 将运行结果存入到变量中,显示出来或者写到磁盘中 set results $expect_out(buffer) # 退出telnet会话,等待服务器的退出提示EOF...欢迎投稿,投稿邮箱: editor@hi-linux.com。 ? ?
/usr/bin/expect -f set password oracle #download spawn scp /home/oracle/p10404530_112030_Linux-x86...-64_1of7.zip oracle@192.168.188.167:/home/oracle/ set timeout 300 expect "oracle@192.168.188.167...send "exit\r" expect eof [oracle@hosta ~]$ [oracle@hosta ~]$ ....:/home/oracle/ oracle@192.168.188.167's password: p10404530_112030_Linux-x86-64_1of7.zip 100%...-64.zip -rw-r--r-- 1 oracle oinstall 1358454646 Feb 5 17:37 p10404530_112030_Linux-x86-64_1of7.zip
变量:环境变量、状态变量、位置参数变量、自定义变量,调用变量时,要在变量前面加一个 $ 符号echo ①打印字符串 ②打印变量的值,变量调用要加 $环境变量:用于存储有关shell会话和工作环境的系统变量状态变量...:用于记录命令的运行结果位置参数变量:用于向命令或程序脚本中传递信息1 自定义变量:由用户自行定义的变量,可用于用户编写的脚本,多个命令间的值传递等(注意:=前后不要有空格)a=geneecho aecho...$aecho 'this is a $a' #''里面的变量不会被解释echo "this is a $a" # “”里面的变量被解释2 环境变量:用于存储有关shell会话和工作环境的系统变量常见环境变量...输入命令时Linux会去查找PATH里面记录的路径,如果命令存在某一个路径中,就可以成功调用。使用的常见的命令都在提供的路径中,这些路径就保存在PATH变量中。...作用:这个变量代表命令行中所有的参数,把所有的参数看成一个整体$@ 作用:这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区别对待$# 作用:这个变量代表命令行中所有参数的个数
/usr/bin/python import pexpect foo = pexpect.spawn('passwd mqjia') foo.expect("New UNIX password:") foo.sendline...("1234567") foo.expect("Retype new UNIX password:") foo.sendline("1234567") foo.interact()
expect简介 expect是一个自动化交互式应用程序的工具,所以expect可以用来处理交互的命令。借助expect,我们可以将交互过程写在一个脚本上,使之自动化完成。...---- expect脚本远程登录 以上简介中也提到了expect和shell类似,可以进行编程,接下来就实际的编写一些expect脚本来学习expect简单的使用方式。...如果你的系统没有安装expect,需要先安装expect,安装命令如下: yum install -y expect expect示例:编写一个自动远程登录脚本,expect编写的脚本文件后缀名为...语法中不允许行尾注释,注释需要另起一行,否则会报错 set是用来定义一个变量的,变量名后面跟的就是变量的值,不需要使用等于号来赋值,调用变量的方式和shell一样,也是使用$符号。.../usr/bin/expect # expect脚本拿参数的方式有点像是在数组中拿元素一样,也是从0开始数,$argv是expect的一个内置变量 # 第一个参数,下标从0开始 set user [lindex
expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装 下载:expect-5.43.0.tar和tcl8.4.11-src.tar 下载地址:https://pan.baidu.com...-5.43.0]# make && make install (3)安装完成后进行测试 [root@xw4 ~]# expect expect1.1> expect1.1> ------------..."useradd wangshibo\r" expect "*#" send "mkdir /opt/test\r" expect "*#" send "exit\r" interact expect...: (1) 如上expect安装后的路径是: [root@xw4 ~]# which expect /usr/local/bin/expect (2) 做个expect执行文件的软件 [root@xw4...~]# ln -s /usr/local/bin/expect /usr/bin/expect [root@xw4 ~]# ll /usr/bin/expect (3) 编写expect脚本: ---
/usr/bin/expect set host "192.168.6.77" set passwd "12341234" spawn ssh root@$host expect { "yes/no
crontab执行expect脚本 通过rsync的ssh差异备份方式同步本地目录到远端目录,expect代码如下,命令行手动执行即可 Expect代码 # cat expecttool #!.../usr/bin/expect -f set timeout 7200; spawn /usr/bin/rsync -avz -e "/usr/bin/ssh" /path/to/local.../dir/ remoteuser@remotehost:/path/to/remote/dir/ expect { "*yes/no*" { send "yes\r"; ... send "pasword\r"; } } interact 如果要放到crontab任务中,需要把interact替换为 expect
expect有独自的语法、变量 二、ssh远程主机的方式 2.1.简单方式,直接使用expect命令 #!...exit的指令,这里用来标识该expect要退出了 2.2.稍复杂方式,shell脚本调用expect脚本,并传入参数(推荐) shell脚本 #!...} ${ PWD} expect脚本expect.exp #!...\n"; exit 1; } } expect "#" send "hostname\r" expect "#" send "exit\r" expect eof 相关解释: [lindex $argv...0]:expect.exp脚本的第一个位置参数,以此类推 set IP [lindex argv 0]:把第一个位置参数的值赋给变量IP。
命令介绍 Expect中最关键的四个命令是send,expect,spawn,interact。...eof Expect脚本必须以interact或expect eof 结束,执行自动化任务通常expect eof就够了 expect eof 是在等待结束标志。...由spawn启动的命令在结束时会产生一个eof标记,expect eof 即在等待这个标记 # 1.4. bash shell内加入expect脚本 使用expect脚本。 #!...expect "]#" { send "cd /\r" } # 结束 expect eof 3). 使用脚本 ..../test_expect.exp username ip password # 注意事项 脚本文件内容第一行必须加入#!/usr/bin/expect。 expect 脚本文件执行必须使用 .
Linux之expect工具是一个根据脚本与其他交互式程序进行交互。通过在脚本中设定期望值和响应值进行交互操作。主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。.../usr/bin/expect ---v显示expect版本信息 expect 命令参数: spawn交互程序开始,执行后面的命令或程序。...如果设置为-1表示不会超时set定义变量$argvexpect脚本可以接受bash的外部传参,可以使用[ lindex $argv n ]n为0表示第一个传参,为1表示第二个传参,以此类推expect从交互程序进程中指定接收信息...exit退出expect脚本expect eofspawn进程结束后会向expect发送eof,接收到eof代表该进程结束interact执行完代码后保持交互状态,将控制权交给用户。...没有该命令执行完后自动退出而不是留在远程终端上puts输出变量 安装使用 安装 sudo yum -y install expect 或者 sudo apt update && sudo apt-get
领取专属 10元无门槛券
手把手带您无忧上云