Table of Contents

expect : How to use expect command in Linux with examples



About expect

expect - programmed dialogue with interactive programs


How to install

CentOS

yum install expect

Ubuntu

# apt-get install expect


Expect Commands

CommandsNote
set timeout
set timeout 30
The default timeout period is 10 seconds
spawn creates a new process running program args.
send
send “COMMAND\n”
Sends string to the current process.
expect
expect “STRING”
waits until one of the patterns matches the output of a spawned process
interact gives control of the current process to the user, so that keystrokes are sent to the current process, and the stdout and stderr of the current process are returned.
log_file
log_file FILE
If a filename is provided, log_file will record a transcript of the session in the file.
sleep
sleep 2
causes the script to sleep for the given number of seconds.


Tips

Execute from cron, php

If you are execute expect by cron, php, you dont't use interact
Because there isn't standard in. the script is not work.
Please use expect eof and exit.

expect -c "
spawn scp file01 user01@xx.xx.xx.xx:/tmp
expect eof
exit
"

Reference

escape

$ -> \$


Examples

/bin/sh

"  ->  \"

#!/bin/sh
 
HOST=192.168.100.230
UNAME=testuser
PASSWD=testuser
TARGET=test.txt
 
expect -c "
set timeout 20
spawn scp ${TARGET} ${UNAME}@${HOST}:/home/testuser/
expect \"password:\"
send \"$PASSWD\r\"
interact
"
exit 0

#!/bin/bash

hostname=192.168.10.12
username=user01
password=testpass

expect -c "
spawn ssh -l $username $hostname
expect \"password:\" {
  send \"$password\n\"
} \"Are you sure you want to continue connecting (yes/no)?\" {
  send \"yes\n\"
  expect \"password:\"
  send \"$password\n\"
}

expect \"$\"
send \"ls\n\"

interact
"

#!/bin/sh

HOST=xxx.xxx.xxx.xxx
PASS=xxxxxxxxxxx
IDENT=/home/user/.ssh/id_rsa

expect -c "
set timeout 10
spawn scp -i $IDENT /tmp/file.txt user@$HOST:/tmp/
expect \"Enter passphrase for key\"
send \"${PASS}\r\"
expect {\"100%\" { exit 0 }}   # If 100%, exit
"


/usr/bin/expect

#!/usr/local/bin/expect

set timeout 5
spawn telnet 10.1.1.1
 
#Login
expect "Password: "
send -- "aaa\n"
expect ">"
send -- "enable\n"
expect "Password: "
send -- "bbb\n"
 
expect "#"
send -- "terminal length 0\n"
 
expect  "#"
send "show run\n"
 
expect  "#"
send -- "exit\n"
 
expect eof
exit

#!/usr/bin/expect
#./login_pro.sh   192.168.0.100

log_file /var/log/expect.log

set RemoteHost [lindex $argv 0]
set PW [lindex $argv 1]
set Prompt "\[#$%>\]"

set timeout 5

spawn env LANG=C /usr/bin/ssh ${RemoteHost}
expect {
    "(yes/no)?" {
        send "yes\n"
        exp_continue
    }
    -re "password:" {
        send -- "${PW}\n"
    }
}

expect {
    -glob "${Prompt}" {
        interact
        exit 0
    }
}