Expect has regular expression pattern matching and general program capabilities, allowing simple scripts to intelligently control programs such as telnet, ftp, and ssh, all of which lack a programming language, macros, or any other program mechanism. The result is that Expect scripts provide old tools with significant new power and flexibility.

Examples

A simple example is a script that automates a telnet session:

  # Assume $remote_server, $my_user_id, $my_password, and $my_command were read in earlier 
  # in the script.
  # Open a telnet session to a remote server, and wait for a username prompt.
  spawn telnet $remote_server
  expect "username:"
  # Send the username, and then wait for a password prompt.
  send "$my_user_id\r"
  expect "password:"
  # Send the password, and then wait for a shell prompt.
  send "$my_password\r"
  expect "%"
  # Send the prebuilt command, and then wait for another shell prompt.
  send "$my_command\r"
  expect "%"
  # Capture the results of the command into a variable. This can be displayed, or written to disk.
  set results $expect_out(buffer)
  # Exit the telnet session, and wait for a special end-of-file character.
  send "exit\r"
  expect eof

Another example is a script that automates ftp:

  # Open an ftp session to a remote server, and wait for a username prompt.
  spawn ftp $remote_server
  expect "username:"
  # Send the username, and then wait for a password prompt.
  send "$my_user_id\r"
  expect "password:"
  # Send the password, and then wait for an ftp prompt.
  send "$my_password\r"
  expect "ftp>"
  # Switch to binary mode, and then wait for an ftp prompt.
  send "bin\r"
  expect "ftp>"
  # Turn off prompting.
  send "prompt\r"
  expect "ftp>"
  # Get all the files
  send "mget *\r"
  expect "ftp>"
  # Exit the ftp session, and wait for a special end-of-file character.
  send "bye\r"
  expect eof

Below is an example that automates sftp, with password:

 #!/usr/local/bin/expect -f #<---insert here your expect program location

 # procedure to attempt connecting; result 0 if OK, 1 elsewhere
 proc connect {passw} {
  expect {
    "Password:" { 
        send "$passw\r"
 	expect {
 	   "sftp*" {
 		return 0
 	    }  
 	}
     }
  }
  # timed out
  return 1
 }

 #read the input parameters
 set user [lindex $argv 0]
 set passw [lindex $argv 1]
 set host [lindex $argv 2]
 set location [lindex $argv 3]
 set file1 [lindex $argv 4]
 set file2 [lindex $argv 5]

 #puts "Am citit:\n";
 #puts "user: $user";
 #puts "passw: $passw";
 #puts "host: $host";
 #puts "location: $location";
 #puts "file1: $file1";
 #puts "file2: $file2";

 #check if all were provided
 if { $user == "" || $passw == "" || $host == "" || $location == "" || $file1 == "" || $file2 == "" }  {
   puts "Usage: <user> <passw> <host> <location> <file1 to send> <file2 to send>\n"
   exit 1
 }

 #sftp to specified host and send the files
 spawn sftp $user@$host

 set rez [connect $passw]
 if { $rez == 0 } {
   send "cd $location\r"
   set timeout -1
   send "put $file2\r"
   send "put $file1\r"
   send "ls -l\r"
   send "quit\r"
   expect eof
   exit 0
 }
 puts "\nError connecting to server: $host, user: $user and password: $passw!\n"
 exit 1

from wikipedia :http://en.wikipedia.org/wiki/Expect
Advertisements