美文网首页
shell-expect

shell-expect

作者: 单单丹丹 | 来源:发表于2019-01-03 00:18 被阅读0次

    expect 用来实现自动和交互式任务进行通信,而无需人的干预
    依赖tcl,离线安装expect前需要提前安装tcl

    cat test_expect.sh 
    #!/usr/bin/expect -f
    #
    set hostip "192.168.0.106"
    set username "root"
    set passwd "root1234"
    
    spawn ssh $username@$hostip
    expect {
    "(yes/no)?" {send "yes\r";exp_continue}
    }
    expect "*assword:"
    
    send "$passwd\r"
    
    expect "~]$"
    send "path=`pwd`\r"
    expect "$"
    send "echo \$path\r"
    expect "$"
    
    说明:
      1. 首行指定用来执行该脚本的命令程序
      1. 定义参数:
        a. set hostip "192.168.0.106" 定义常量
        b. 执行脚本时传递参数类似shell,如执行脚本时传入一个ip参数即为:set hostip [lindex $argv 0]
      1. spawn ssh username@hostip,spawn用来启动脚本和命令的会话,它用于启动一个进程,之后所有expect操作都在这个进程中进行。
      1. expect "*assword:",expect命令用于等候一个匹配输出,一旦匹配就执行后面的动作。
      1. send "path=pwd\r", send是expect中的动作命令,向进程发送输入内容,模拟用户输入。
      1. exp_continue:需处于expect的动作中,表示expect的匹配从头开始继续匹配。
      1. exit,close,wait:exit表示退出脚本,close表示立即关闭过程,而wait则是等待过程返回eof时关闭。
      1. interact:运行表示将控制权交给用户,与spawn生成的进程进行交互。由用户与spawn生成的进程进行交互,比如登录ftp服务器并下载的过程中,登录ftp服务器的过程可以由用户输入自己的用户名和密码,然后用户再输入q字符将控制权交给脚本,由脚本完成后面的交互动作。
      1. set timeout 30,设置超时时间,单位秒,不设置默认10秒,到了这个timeout,还是没有屏幕输出的话,expect脚本中下面的代码就会执行
    输出结果
    输出结果

    相关文章

      网友评论

          本文标题:shell-expect

          本文链接:https://www.haomeiwen.com/subject/hpdxrqtx.html