IF ELSE in EXPECT script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting IF ELSE in EXPECT script
# 1  
Old 10-25-2019
IF ELSE in EXPECT script

I have an Expect script I've re-purposed from another process, and I would like to add in an IF THEN ELSE condition. I would greatly appreciate some help with the syntax.

The purpose of the script is to send a file to an FTP site. It works as it is right now (as in, the script actually does FTP the file over), it's just that occasionally the FTP site will reject my connection. It's totally intermittent, and I'm working with the company to get them to fix their damn FTP site ... but you know how it is. It MUST be something on my end. Smilie

Anyway, my goal is to get them to fix their FTP site or to migrate me to another one, but in the interim, and because it's good coding anyway, I'd like to add an IF ELSE THEN to my script. IF the FTP site returns a "Connection Refused", THEN try again, ELSE use my current code. Basically I'd like to keep trying until it works or fails 5 times kinda thing.

**CURRENT SCRIPT THAT WORKS TO SEND THE FILE (unless there is a connection error):**
Code:
    HOST=$1  
    USER=$2  
    PASSWD=$3  
    FILE=$4  

    #lftp<<END_SCRIPT  
    #open sftp://$HOST  
    #user $USER $PASSWD  
    #put $FILE  
    #bye  
    #END_SCRIPT  

    expect -c "  
    spawn sftp ${USER}@${HOST}  
    expect \"password:\"  
    send \"${PASSWD}\r\"  
    expect \"sftp>\"  
    send \"cd /import/nonCC/data\r\"  
    expect \"sftp>\"  
    send \"put ${FILE}\r\"  
    expect \"sftp>\"  
    send \"exit\n\"  
    interact "

Here is the error I get if the connection is refused ...
Code:
    spawn sftp xxx@pretendftp.site
    Connecting to pretendftp.site...
    ssh: connect to host pretendftp.site port 22: Connection refused

    Couldn't read packet: Connection reset by peer

    send: spawn id exp3 not open
        while executing
    "send "pretendpassword\r""

And out of interest, the message I get when the transfer is successful ...
Code:
    spawn sftp xxx@pretendftp.site.
    Connecting to pretendftp.site....
    xxx@pretendftp.site.'s password: 
    sftp> cd /import/nonCC/data
    sftp> put <PeopleSoft directory here>/division__20191025.txt
    Uploading <PeopleSoft directory here>/division__20191025.txt to /import/nonCC/data/division__20191025.txt

    <PeopleSoft directory here>/log_ou   0%    0     0.0KB/s   --:-- ETA
    <PeopleSoft directory here>/log_ou 100%   11KB  11.2KB/s   00:00

Anyway, I would greatly appreciate help with the script to capture the connection refused error in order to try again.

Last edited by vbe; 10-25-2019 at 02:13 PM..
# 2  
Old 10-25-2019
You should consider increasing the verbosity of the sftp process using the -v or even the -vv option.

See for example:

sftp verbose output

Or the sftp man page......

Assuming Linux, for example, see also:

https://www.unix.com/man-page/linux/1/sftp/

and

https://www.unix.com/man-page/linux/1/ssh/

Code:
    -v      Verbose mode.  Causes ssh to print debugging messages about its progress.	This is helpful in debugging connection, authentication,
	     and configuration problems.  Multiple -v options increase the verbosity.  The maximum is 3.

As it says above, increasing logging verbosity is helpful when debugging connection, authentication and configuration problems.
This User Gave Thanks to Neo For This Post:
# 3  
Old 10-26-2019
That is an excellent idea! I'll give that a try and go from there.

Thank you for your time and support with this question.
This User Gave Thanks to TheMegaSage For This Post:
# 4  
Old 10-28-2019
Just to close the loop on this, it turns out you are a genius, Neo. Adding in a -vv switch, it turns out that successful connections are going to one specific IP, and the unsuccessful are going to a *second* IP. So I just need to open up port 22 on that second IP and life is good again.

Thank you very much for your help with this.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Expect script returning string following a found expect.

I'm fairly new to scripting so this might not be possible. I am using Expect with Cisco switches and need to capture the string after finding the expect request. For example, when I issue "show version" on a Nexus switch, I'm looking to capture the current firmware version: #show version ... (0 Replies)
Discussion started by: IBGaryA
0 Replies

2. Shell Programming and Scripting

SFTP or scp with password in a batch script without using SSH keys and expect script

Dear All, I have a requirement where I have to SFTP or SCP a file in a batch script. Unfortunately, the destination server setup is such that it doesn't allow for shell command line login. So, I am not able to set up SSH keys. My source server is having issues with Expect. So, unable to use... (5 Replies)
Discussion started by: ss112233
5 Replies

3. Programming

Calling another expect script inside an expect script

I have an expect script called remote that I want to call from inside my expect script called sudoers.push, here is the code that is causing me issues: set REMOTE "/root/scripts/remote" ... log_user 1 send_user "Executing remote script as $user...\n" send_user "Command to execute is: $REMOTE... (1 Reply)
Discussion started by: brettski
1 Replies

4. UNIX for Advanced & Expert Users

Unable to run the script on remote machine Using Expect script

Not able to execute the file in remote host using except utility I am automating the SFTP keys setp process: So i created the expect script for controlling the output of shell below is my main code: Code: #!/usr/bin/expect set fd set password close $fd set df set app close $df... (1 Reply)
Discussion started by: Manoj Bajpai
1 Replies

5. Programming

Calling expect script inside another expect

Hi, Am very new to expect scripting.. Can You please suggest me how to call an expect script inside another expect script.. I tried with spawn /usr/bin/ksh send "expect main.exp\r" expect $root_prompt and spawn /usr/bin/ksh send "main.exp\r" expect $root_prompt Both... (1 Reply)
Discussion started by: Priya Amaresh
1 Replies

6. Shell Programming and Scripting

Expect script to execute a script on a remote host

Hi, I am new to the expect scripting. I have this expect script as below : spawn ssh remote_server -l id set pass "12345" set opt "s" expect "Password:" {send "$pass\r" ; } expect "*ENTER*" {send "Enter\r"; exp_continue } expect "Please select option :" {send... (2 Replies)
Discussion started by: curt137
2 Replies

7. Shell Programming and Scripting

Expect script help needed- script failing if router unavailable

Hey all. Sometimes I'm tasked to change some router configs for the entire network (over 3,000 Cisco routers). Most of the time its a global config parameter so its done with a loop and an IP list as its the same configuration change for all routers. This is working OK. However, sometimes an... (3 Replies)
Discussion started by: mrkz1974
3 Replies

8. Programming

Expect script to run a Shell script on remote server

Hi All, I am using a expect script to run a shell script on remote server, the code is as follows. But the problem is that it executes only first command, and hangs it doesn't run the next commands. spawn ssh $uid@$host expect "password:" send "$password\r" expect "*\r" send... (2 Replies)
Discussion started by: yashwanthsn
2 Replies

9. Shell Programming and Scripting

Need help with Expect script for Cisco IPS Sensors, Expect sleep and quoting

This Expect script provides expect with a list of IP addresses to Cisco IPS sensors and commands to configure Cisco IPS sensors. The user, password, IP addresses, prompt regex, etc. have been anonymized. In general this script will log into the sensors and send commands successfully but there are... (1 Reply)
Discussion started by: genewolfe
1 Replies

10. Shell Programming and Scripting

strange expect script behavior, or am i misunderstanding expect scripting?

Hello to all...this is my first post (so please go easy). :) I feel pretty solid at expect scripting, but I'm running into an issue that I'm not able to wrap my head around. I wrote a script that is a little advanced for logging into a remote Linux machine and changing text in a file using sed.... (2 Replies)
Discussion started by: v1k0d3n
2 Replies
Login or Register to Ask a Question