LinuxExpect用法
LinuxExpect⽤法
Linux Expect ⽤法
1. 基本介绍
expect是建⽴在tcl基础上的⼀个⾃动化交互套件, 在⼀些需要交互输⼊指令的场景下, 可通过脚本设置⾃动进⾏交互通信. 其交互流程是:
spawn启动指定进程 -> expect获取指定关键字 -> send想指定进程发送指定指令 -> 执⾏完成, 退出.
2. 安装expect⼯具
在ubuntu1804 上安装
sudo apt install expect -y
查看expect的安装路径:
~ command -v expect
/usr/bin/expect
3. expect的常⽤命令
命 令说 明
spawn启动新的交互进程, 后⾯跟命令或者指定程序
expect从进程中接收信息, 如果匹配成功, 就执⾏expect后的动作
send向进程发送字符串
send exp_send⽤于发送指定的字符串信息
exp_continue在expect中多次匹配就需要⽤到
send_user⽤来打印输出 相当于shell中的echo
interact允许⽤户交互
exit退出expect脚本
eofexpect执⾏结束, 退出
set定义变量
puts输出变量
set timeout设置超时时间
4. 脚本使⽤⽰例
这⾥以ssh远程登录某台服务器的脚本为例进⾏说明, 假设此脚本名称为remote_login.sh:
#!/usr/bin/expect
set timeout 30
spawn ssh -l root 172.16.22.131
expect "password*"
send "123456\r"
interact
interact
expect执⾏完成后保持⽤户的交互状态, 这个时候⽤户就可以⼿⼯操作了.
如果没有这⼀句, expect执⾏完成后就会退出脚本刚刚远程登录过去的终端, ⽤户也就不能继续操作了.
直接通过expect执⾏多条命令
#!/usr/bin/expect -f
set timeout 10
# 切换到root⽤户, 然后执⾏ls和df命令:
spawn su - root
expect "Password*"
send "123456\r"
expect "]*" # 通配符
send "ls\r"
expect "#*" # 通配符的另⼀种形式
send "df -Th\r"
send "exit\r" # 退出spawn开启的进程expect eof # 退出此expect交互程序
通过shell调⽤expect执⾏多条命令
注意⾸⾏内容, 这种情况下可通过sh script.sh、bash script.sh 或./script.sh, 都可以执⾏这类脚本:
#!/bin/bash
ip="172.16.22.131"
username="root"
password="123456"
# 指定执⾏引擎
/usr/bin/expect < set time 30 spawn ssh $username@$ip df -Th expect { "*yes/no" { send "yes\r"; exp_continue } "*password:" { send "$password\r" } } expect eof EOF
linux expect 语法
- 1 - linux expect 语法
Linuxexpect是一种自动化脚本语言,它可以模拟人类的行为来操作计算机上的程序。它的语法非常简单,主要由命令和参数构成。命令可以是 shell 命令、expect 内置命令或自定义的函数。
expect 脚本主要用于自动化测试、自动化配置等场景。比如,你可以编写一个 expect 脚本来自动登录远程服务器、执行一些指令并返回结果。这样可以大大提高工作效率和减少人为错误。
expect 的语法主要包括以下几个方面:
1. spawn 命令:用于启动一个子进程,并与之交互。语法为:spawn command [args]
2. expect 命令:用于等待子进程输出的特定内容,并在匹配到指定内容后执行相应操作。语法为:expect pattern {action}
3. send 命令:用于向子进程发送数据。语法为:send string
4. interact 命令:用于交互式地操作子进程。语法为:interact
5. set 命令:用于设置变量的值。语法为:set variable value
除了以上几个命令外,expect 还有很多其他的命令和语法,比如 sleep 命令、exp_continue 命令等。如果你想深入了解 expect
的语法,可以查看相关的文档和教程。
expect 命令的双引号 -回复
expect 命令的双引号 -回复
什么是expect命令以及它的双引号用法?
Expect命令是一个功能强大的自动化工具,常用于测试和自动化任务中。它基于Tcl编程语言,并通过模拟用户的键盘输入和对远程数据的期望响应实现自动化交互。
在Expect命令中,双引号是用来定义期望字符串(expect strings)的。期望字符串是Expect命令用来匹配远程服务器返回的结果的。通过使用双引号,我们可以定义多个期望字符串,以匹配不同的情况,并在匹配到期望字符串时执行相应的操作。
下面将逐步解释Expect命令及其双引号用法的具体步骤。
第一步:安装Expect命令
1. 打开终端窗口(对于Linux和MacOS系统)或命令提示符窗口(对于Windows系统)。
2. 输入适用于你的操作系统的安装命令,例如在Ubuntu上可以使用以下命令进行安装:sudo apt-get install expect。
第二步:创建Expect脚本
1. 使用任何文本编辑器打开一个新文件,例如hello.exp。 2. 在脚本的开头,添加shebang行(#!/usr/bin/expect),指定使用Expect作为解释器。
3. 在脚本中定义期望字符串,使用双引号括起来。例如,添加以下代码行:
expect "Password:"
4. 定义其他期望字符串,可以使用多个expect命令进行匹配。例如,添加其他期望字符串:
expect "Username:"
expect "Login failed"
5. 在每个expect命令之后,添加对应的操作,这些操作将在匹配到期望字符串时执行。例如,添加以下代码行:
send "my_password\r"
6. 保存并关闭文件。
第三步:运行Expect脚本
1. 打开终端窗口(或命令提示符窗口)。
2. 导航到包含Expect脚本的目录。
3. 运行以下命令来执行脚本:expect hello.exp
linux下expect使用教程
linux下expect使⽤教程
⼀、expect介绍
Expect是Unix系统中⽤来进⾏⾃动化控制和测试的软件⼯具,由DonLibes制作,作为Tcl脚本语⾔的⼀个扩展,应⽤在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该⼯具利⽤Unix伪终端包装其⼦进程,允许任意程序通过终端接⼊进⾏⾃动化控制;也可利⽤Tk⼯具,将交互程序包装在X11的图形⽤户界⾯中。 简单地说,expect是⼀个⼯具,可以根据⽤户设定的规则和系统进程进⾏⾃动化交互,例如远程登陆的密码输⼊、⾃动化的执⾏远程命令。
⼆、expect例⼦
下⾯的脚本完成远程服务器的登录操作,并在远程服务器上执⾏⼀些简单的命令,在整个交互中不需要⼈⼯进⾏⼲预。
#!/usr/bin/expectif {$argc < 2} { puts stdout "$argv0 err params\n" exit 1}
proc do_console_login {login pass} {puts $login;puts $pass;}
puts [llength $argv]
set timeout 10set user [lindex $argv 0]set password [lindex $argv 1]do_console_login $user $password
spawn ls -l
expect "login_52.exp"
expect eof
spawn ssh $user@10.12.18.37#36000
expect { "yes/no" {send "yes\n" expect "assword: " {send "$password\n"} } "*assword:" {send "$password\n"}}expect "~>"send "cd /share/arlenhou/; la \n"expect "arlenhou>"
Linuxexpect介绍和用法
Linuxexpect介绍和⽤法
expect⼯具主要⽤于在linux上免交互实⾏程序。
1. 安装expect
# yum install expect -y
2. expect⽤法
expect常⽤选项
-c 从命令⾏执⾏expect脚本,默认expect是交互地执⾏的
expect常⽤命令
spawn 交互程序开始后⾯跟命令或者指定程序
expect 获取匹配信息匹配成功则执⾏expect后⾯的程序动作
send ⽤于发送指定的字符串信息
exp_continue 在expect中多次匹配就需要⽤到
send_user ⽤来打印输出 相当于shell中的echo
exit 退出expect脚本
eof expect 执⾏结束 退出
set 定义变量
puts 输出变量
set timeout 设置超时时间
3. expect脚本⽰例
1. ssh免交互跨主机执⾏命令
vim myssh.sh
#!/bin/bash
ip=192.168.6.215
user=root
password=123456
cmd="ifconfig"
function myssh(){
(
expect -c "
spawn ssh $user@$ip $cmd
set timeout 60
expect {
\"Are you sure you want to continue connecting (yes/no)?\" { send \"yes\n\" }
\"*password:\" { send \"$password\n\" }
}
expect eof
"
)
}
myssh
2. scp免交互跨主机拷贝⽂件
vim myscp.sh
#!/bin/bash
ip=192.168.6.215
user=root
password=123456
src_file=./date.txt
dest_path=/tmp/
function myscp(){
(
expect -c "
spawn scp $src_file $user@$ip:$dest_path
linux之expect用法
linux之expect⽤法
1. [#!/usr/bin/expect]
这⼀⾏告诉操作系统脚本⾥的代码使⽤那⼀个shell来执⾏。这⾥的expect其实和linux下的bash、windows下的cmd是⼀类东西。
注意:这⼀⾏需要在脚本的第⼀⾏。 2. [set timeout 30]
基本上认识英⽂的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒 。timeout -1 为永不超时3. [spawn ssh -l username 192.168.1.1]
spawn是进⼊expect环境后才可以执⾏的expect内部命令,如果没有装expect或者直接在默认的SHELL下执⾏是找不到spawn命令的。所以不要⽤ “which spawn“之类的命令去找spawn命令。好⽐windows⾥的dir就是⼀个内部命令,这个命令由shell⾃带,你⽆法找到⼀个或 dir.exe 的可执⾏⽂件。
它主要的功能是给ssh运⾏进程加个壳,⽤来传递交互指令。 4. [expect "password:"]
这⾥的expect也是expect的⼀个内部命令,有点晕吧,expect的shell命令和内部命令是⼀样的,但不是⼀个功能,习惯就好了。这个命令的意思是判断上次输出结果⾥是否包含“password:”的字符串,如果有则⽴即返回,否则就等待⼀段时间后返回,这⾥等待时长就是前⾯设置的30秒
5. [send "ispass\r"]
这⾥就是执⾏交互动作,与⼿⼯输⼊密码的动作等效。
温馨提⽰: 命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查⼀下。 6. [interact]
执⾏完成后保持交互状态,把控制权交给控制台,这个时候就可以⼿⼯操作了。如果没有这⼀句登录完成后会退出,⽽不是留在远程终端上。如果你只是登录过去执⾏ 7.$argv 参数数组
expect脚本可以接受从bash传递过来的参数.可以使⽤[lindex $argv n]获得,n从0开始,分别表⽰第⼀个,第⼆个,第三个....参数
在Linux下灵活使用expect脚本的小窍门
对于喜爱自动化的Linux系统管理员而言,一定是用过expect这个命令行工具。Expect 是由 Don Libes 基于 Tcl 语言开发的,并被广泛应用于交互式操作和自动化测试的场景之中,它尤其适用于需要对多台服务器执行相同操作的环境中,可以大幅度提高系统管理人员的工作效率。本文是最近更新的一篇技术分享文章,其中详细讲述了如何通过不同的命令行选项来执行一个expect脚本,具体有什么用,大家可以自由发挥想象力。
本文假设您对expect的基本使用方法已经有一定的了解。
如果你是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”选项执行代码的时候,你可以输出诊断的信息。如下所示:
linux. expect 实现原理
linux. expect 实现原理
Expect 是一个自动化工具,用于自动化交互式应用程序的输入和输出。在
Linux 系统中,Expect 可以用于自动化诸如 ssh、ftp、passwd、telnet、fsck、rlogin
和 tip 等交互式应用程序的操作。
Expect 的实现原理主要包括以下几个步骤:
1. 启动应用程序:Expect 启动要自动化的应用程序,并与其建立连接。
2. 读取输出:Expect 读取应用程序的输出,并根据输出内容进行相应的处理。
3. 发送输入:根据应用程序的输出,Expect 自动发送相应的输入。
4. 等待结束:当应用程序结束时,Expect 会捕获其退出状态,并结束自动化操作。
Expect 的实现原理主要依赖于以下技术:
1. 进程管理:Expect 通过进程管理技术来启动、监控和结束应用程序。
2. 输入/输出重定向:Expect 通过输入/输出重定向技术来读取和发送数据。
3. 正则表达式:Expect 使用正则表达式来匹配和处理应用程序的输出。
4. 条件判断:Expect 使用条件判断语句来根据应用程序的输出发送相应的输入。
总之,Expect 的实现原理主要是通过进程管理、输入/输出重定向、正则表达式和条件判断等技术来实现自动化交互式应用程序的操作。
expect用法
- 1 - expect用法
expect一个功能强大的工具,可以用来控制交互式应用程序,它的功能可以做实时的自动输入,分析结果,执行一系列操作以及生成报告。expect时也可以被用来与交互式应用程序进行交互,如处理 SSH Telnet 。
expect着广泛的应用,几乎可以应用在所有交互式应用程序中,expect以模拟用户登录到远程服务器进行操作,既可以在 Linux 中运行,也可以在 Windows 中运行。
expect用法主要分为三个步骤:
1.写expect脚本,在expect脚本中定义一系列的expect指令,比如登录到远程服务器,发送一条命令到远程服务器,接收服务器的输出等等;
2.过expect脚本调用expect程序,运行expect程序,按照expect脚本中的指令执行;
3.理expect程序的输出,对expect程序的输出进行处理,得到需要的结果或者报告。
expect能强大,在不同的应用场景下都有着广泛的用法。以下是一些典型的应用场景:
1.Linux系统中使用expect,实现快速的文件传输,比如定期的备份文件;
2.Windows环境中使用expect,实现文件传输,定期更新服务器上的文件; - 2 - 3.Linux系统中使用expect,实现运行一些特定的命令,比如
cron期任务;
4.交互式应用程序中使用expect,实现控制和自动化一些操作,如解析SSH、Telnet等输出;
5.游戏中使用expect,实现自动输入指令,以提升游戏体验;
expect法虽然多样,但是它有着一些基本的共性,比如说需要定义一个expect脚本,通过expect命令来控制交互式的应用程序,最后处理expect的输出,得到最终的结果。expect有着广泛的应用,它使得系统管理和自动化任务变得更加简单高效,有助于提升系统管理的效率。
linux用expect不用输密码自动scp数据linux操作系统-电脑资料
linux用expect不用输密码自动scp数据linux操作系统-电脑资料
以前我给各位同学有讲过用expect不用输密码自动scp数据数据,它的要求是把一台服务器上的备份sql文件都传到公司本地服务器上,下面我先来介绍一下,。
把一台服务器上的备份sql文件都传到公司本地服务器上,但公司本地服务器上做了key验证的,也就是说要用key才能登录本地服务器,还有外网的那台服务器没有做key验证,好吧,那就直接从那台服务器上把数据拖到本地服务器上吧.
脚本如下:
vi down.exp
代码如下复制代码
#!/usr/bin/expect -f
set timeout -1
set passwd 你的密码
spawn scp -r -P18330 **********.x.x:/root/newfile/*/root/bak/
match_max 100000
expect -exact "password:"
send -- "$passwdr"
expect eof
执行方式如下:
代码如下复制代码chmod +x down.exp
expect down.exp
这样就可以不用输入密码,就把公网服务器上的备份数据拷到本地服务器上来.
ps:要安装expect
centos直接yum -y install expect
在这个基于上我需要今天公司要求既要原来每周自动down数据回来,又要在手动去down数据的时候是服务器上最新备份的,好吧,为了满足这样的要求,我在原脚本上做了一些修改.
手动down数据脚本:
代码如下复制代码
#!/usr/bin/expect -f
set timeout -1
set passwd passwd
*************************.x.xexpect {
"yes/no" { send "yesr";exp_continue }
"password:" { send "$passwdr" }
Linuxexpect用法
Linuxexpect⽤法
expect是建⽴在tcl基础上的⼀个⼯具,它⽤来让⼀些需要交互的任务⾃动化地完成。
因为expect是基于tcl的,所以需要你的系统中安装有tcl
检查是否安装tcl,expect
[root@master shell]# whereis tcl
tcl: /usr/lib64/tcl8.5 /usr/share/tcl8.5
如果没有安装,使⽤yum安装:yum install -y tcl
yum install -y expect
expect的4个命令
Expect中最关键的四个命令是send,expect,spawn,interact。
命令说明
send⽤于向进程发送字符串
expect从进程接收字符串
spawn启动新的进程
interact允许⽤户交互
例1:远程登录并创建⽂件后退出
#!/usr/bin/expect ##注意路径,使⽤ [whereis expect] 查看
set user "hadoop" ##设定参数,注意",'的区别
set pwd "yangkun"
set host "48.93.36.144"
set timeout -1 ##;号可有可⽆
spawn ssh -p 2020 $user@$host
expect { ##expect后有空格
"*yes/no" {send "yes\r";exp_continue}
"*password:" {send "$pwd\r"}
}
expect "]*" ## 通配符,使⽤ ]* 有效, 使⽤ *# ⽆效
send "touch /home/hadoop/aa.txt\r"
expect "]*"
send "echo hello world >> /home/hadoop/aa.txt\r"
expect "]*"
[interact] ##⼈为交互
send "exit\r" ##退出
例2:配置免密登录并安装JDK
#!/bin/bash
