• 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.com 或 dir.exe 的可执行文件。

    4. [expect "password:"] 

    这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒。

    5. [send "ispass "] 

    这里就是执行交互动作,与手工输入密码的动作等效。 

    温馨提示: 命令字符串结尾别忘记加上“ ”。 

    6. [interact] 

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

    7.$argv 参数数组

    expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数

    实例脚本

    #!/usr/bin/expect
    
    #Usage sshsudologin.expect <host> <ssh user> <ssh password> <su user> <su password>
    
    set timeout 60
    
    spawn ssh -t [lindex $argv 0] [lindex $argv 2]
    
    expect "yes/no" {
            send "yes
    "
            expect "*?assword" { send "[lindex $argv 1]
    " }
            } "*?assword" { send "[lindex $argv 1]
    " }
    
    #expect "# " { send "su - [lindex $argv 3]
    " }
    #expect ": " { send "[lindex $argv 4]
    " }
    #expect "# " { send "ls -ltr
    " }
    interact
  • 相关阅读:
    自定义镜像流程
    go语言中go+select的理解
    go语言中var声明chan、map、指针,注意的情况
    docker SDK 的基本学习
    ubuntu上安装postgres以及在远程连接上的坑
    go语言模板中的os.Stdout标准输出转化为string
    angular7升级到angular8
    sudo不用在输入密码
    go语言简单的执行shell命令
    Ubuntu上面安装docker
  • 原文地址:https://www.cnblogs.com/houkai/p/4770597.html
Copyright © 2020-2023  润新知