linux下expect的使用

expect 使用
安装:
yum -y install expect


1,首行声明
2,控制台输出
3,设置日期变量$date
4,设置ip变量$local_ip 127.0.0.1
5,设置默认等待时间: 3000
#!/usr/bin/expect -f
set date [exec date "+%Y%m%d"]
set ip1 123.57.219.236
set timeout 3000

6,简单交互
spawn

send:用于向进程发送字符串
expect:从进程接收字符串
spawn:启动新的进程
interact:允许用户交互

等待输入"hi\n"
?
输出"hello word\n"
?

expect "hi\n"
send "you typed <$expect_out(buffer)>"
send "but I only expected <$expect_out(0,string)>"
当在标准输入中输入
test
hi
是,运行结果如下
you typed: test
hi
I only expect: hi




匹配到hi后,会输出"you said hi"
expect "hi" {send "You said hi"}


匹配到hi,hello,bye任意一个字符串时,执行相应的输出
expect {
"hi" { send "You said hi\n"}
"hello" { send "Hello yourself\n"}
"bye" { send "That was unexpected\n"}
}


这段代码的作用是登录到ftp服务器ftp ftp.uu.net上,并以二进制的方式下载服务器上的文件test.tar.gz。程序中有详细的注释。
set timeout -1
spawn ftp ftp.test.com      //打开新的进程,该进程用户连接远程ftp服务器.最后将控制权交给用户.
expect "Name"             //进程返回Name时
send "user\r"        //向进程输入anonymous\r
expect "Password:"        //进程返回Password:时
send "123456\r"    //向进程输入don@libes.com\r
expect "ftp> "            //进程返回ftp>时
send "binary\r"           //向进程输入binary\r
expect "ftp> "            //进程返回ftp>时
send "get test.tar.gz\r"  //向进程输入get test.tar.gz\r
interact
ssh免密码登录:123.57.219.236,密码:123456:
spawn ssh -p10022 root@123.57.219.236
expect {
"yes/no" {send "yes\r";exp_continue}
"password:" {send "123456\n\r"}
}
interact


执行236上指定目录的脚本,可以适配第一次连接:


spawn ssh -p 10022  rsync@$ip1 "expect /data/software/bak/rsync_2_48.sh"
expect {
      "yes/no" { send "yes\r";exp_continue}
      "$ip1's password:" { send "pwd@123\n\r"}
      }
expect eof
2,获取执行参数
执行的第一个参数


set nb1 [lindex $argv 0]
# 执行第二个参数


set nb2 [lindex $argv 1]
# 参数数量


puts "$argc"
# 程序名字


puts "$argv0"




3,逻辑判断


switch  分支结构


set color  [lindex $argv 0]
switch  $color  {
        apple {
                puts "apple is blue"
        }
        banana {
                puts "banana is yellow "
        }
}


if 分支


#!/usr/bin/expect
set test [lindex $argv 0]
if { "$test" == "apple" } {
        puts "$test"
} else  {
        puts "not apple"
}
for 循环结构
第一种


foreach number {
1
2
3thread
4third
} {
        puts "$number"
}


第二种


for {set i 0} {$i<4} {incr i} {
        puts "$i"
}


while  循环结构


set i 1
while {$i<4} {
        puts "$i"
        incr i
}


4 函数定义


proc test {} {
        puts "ok"
}
test




5. 结尾加 interact
  执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行

然后在shell脚本中调用即可:

#!/bin/bash
expect /root/shell/login.exp agrv1 agrv2



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,下面是安装 expect 工具的步骤: 1. 首先,打开终端(Terminal)。 2. 确认系统已经安装了 tcl 和 tk 两个软件包,如果没有安装,可以使用以下命令进行安装: ``` sudo apt-get update sudo apt-get install tcl tk ``` 3. 接下来,使用以下命令安装 expect 工具: ``` sudo apt-get install expect ``` 4. 安装完成后,可以使用以下命令验证 expect 是否安装成功: ``` expect -v ``` 如果成功安装,则会显示 expect 的版本号。 希望这些步骤可以帮助你安装 expect 工具。如果有任何疑问,请随时提出。 ### 回答2: Expect是一款用于自动化交互的工具,常用于编写脚本来模拟人工交互。在Linux系统中,安装Expect可以使用包管理器进行安装。 首先,打开终端并输入以下命令以更新系统软件库: ``` sudo apt update ``` 然后输入以下命令以安装Expect: ``` sudo apt install expect ``` 这将自动从网络下载Expect安装包,并跟随其依赖完成安装过程。如果您的系统已经安装了相应的程序,您应该会看到提示说Expect已经是最新版本。 安装完成后,您可以通过输入以下命令来检查Expect是否正确安装: ``` expect -v ``` 如果该命令返回了版本信息,那么Expect已经成功安装在您的系统上。 如果您不使用Ubuntu或Debian发行版,可以使用相应的包管理器进行安装,例如在Fedora或CentOS上,可以使用以下命令进行安装: ``` sudo yum install expect ``` 或者: ``` sudo dnf install expect ``` 在Arch Linux上,可以使用以下命令: ``` pacman -S expect ``` 总之,使用包管理器安装Expect非常简单,并且可以在各种Linux发行版上完成。 ### 回答3: Expect是一个自动交互工具,可以让你在命令行下操作终端或交互。在Linux系统中通常用于自动化任务和远程管理。 对于安装Expect,我们需要执行以下几个步骤。 1. 打开终端,并使用命令sudo apt-get update更新包列表 2. 使用命令sudo apt-get install expect安装Expect包 3. 安装完成后,可以使用man expect命令查看Expect使用文档 4. 如果需要从源码安装,则可以通过以下步骤执行: a. 下载expect的源代码:https://core.tcl-lang.org/expect/index.html b. 解压缩下载的源代码,进入解压缩后的目录 c. 执行configure脚本,检查系统依赖和生成Makefile,使用命令: ./configure d. 执行make命令进行编译,使用命令: make e. 执行sudo make install命令完成安装,使用命令: sudo make install 5. 安装完成后,通过which expect命令进行验证,如果输出expect所在的路径,则表示安装成功。 在使用Expect时,可以根据需要使用expect命令进行交互操作和send命令发送指令。Expect有强大的自动化功能,可通过脚本编写来执行一系列的操作。例如,可以编写一个expect脚本来自动登录到SSH服务器或FTP服务器,进行文件传输和管理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值