expect 用法

/*
 * expect
 */
    一个用来处理交互的命令。

    可以将交互过程写在一个脚本上,使之自动化完成。可以实现ssh远程连接别的机器,并且在上面执行相应的命令

    Expect中常用最关键的四个命令:send,expect,spawn,interact。
    
    send:用于向进程发送字符串,根据终端提示符是不是和expect的结果来传入,符合就传入
    expect:从进程接收字符串,从spawn中接受;expect可以接收一个字符串参数,也可以接收正则表达式参数
    spawn:启动新的进程
    interact:允许用户交互


    "\r",表示回车

    exp_continue,表示当问题不存在时继续回答下面的问题

    expect eof ,表示问题回答完毕退出 expect 环境

    interact,表示问题回答完毕留在交互界面

    set NAME [ lindex $argv n ],定义变量

    set timeout -1 设置超时方式为永远等待

    set timeout 30 设置超时时间为30秒

    [lindex $argv 0] 获取expect脚本的第1个参数

    [lindex $argv 1] 获取expect脚本的第2个参数

    expect "Hi\n"

    send "hello here\n"

    从标准输入中等到Hi和换行键后,向标准输出输出hello here    

    expect最常用的语法是来自tcl语言的模式-动作。

/*
 * example
 */

#!/bin/bash

PRINTF_RED="\033[31m"
PRINTF_GREEN="\033[32m"
PRINTF_BLUE="\033[34m"
PRINTF_END="\033[0m"

[email protected]:/home/aaaa/CameraSdkLib
DES=tmp/
AC_LIB=ac.tar.gz

GET_PASSWORD=@abcdef

function get_lib()
{
    expect -c "
    spawn scp $SRC/$1 $DES
    expect \"*password:\"
    set timeout 300;
    send \"$GET_PASSWORD\r\";
    expect eof"    
}

sudo apt-get install expect

get_lib $AC_LIB
echo -e $PRINTF_GREEN"download... "$AC_LIB$PRINTF_END

cd tmp
tar -xvf $AC_LIB

rm $AC_LIB

echo -e $PRINTF_RED"finish download"$PRINTF_END

你可能感兴趣的:(Linux,数学建模,linux)