Help with Shell script for FTP


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help with Shell script for FTP
# 1  
Old 03-01-2010
Help with Shell script for FTP

Quote:
Hi All,

This s not the first time i am posting this Issue. I tried to solve it before, But unfortunately, not able to complete it as i am not a Unix shell programmer( I am still struggling for the solution as i do not have privilages to implement or ask unix team here about .netrc file implementation). I felt very bad about myself that , have i done any wrong asking the solution for excuting the script in wrong way. Please pardon me if i did any thing wrong. If any one can help me to execute this script, will be appreciated.

I am explaining it again as i have to resolve this issue very soon. As i do not have knowledge in unix to test/debug it line by line.

I have to send a processed file to different server locations. I feel, if this job can be done parallel in the background - Time will come down.

Script file name(ftplocations.sh) as below
Code:
 
#!/usr/bin/ksh
export filename=/grid/PowerCenter/inbound/AT/filelist.txt
export SOURCE_DIR=/grid/PowerCenter/inbound/AT
export ICOMS_FTP_TGT_DIR1=/dw/input/ATU/ICOM_SERV1
export ICOMS_FTP_TGT_DIR2=/dw/input/AT/ICOM_SERV2
export FILE_MASK="ATRPU_RP_ATU"
echo "start"
ftp_data_file()
{
 
   # local parameters
   local FTP_FUNCTION=$1
   local FILE_NAME=$2
   local FTP_SERVER=$3           # remote delivery server
   local FTP_USER=$4    # ftp user name
   local FTP_PASS=$5     # ftp user pwd
   local FTP_TARGET_DIR=$6   # local target file directory
 
 # local variables
   local SOURCE_DIR=${SOURCE_DIR}   
 
 echo "FTPing the file from the server"
   # ftp file from remote server to local informatica server
 
 ftp -i -nv host <<EOF
 user ${FTP_USER} pass ${FTP_PASS}
 cd $FTP_TARGET_DIR
 ascii
 $FTP_FUNCTION $FILE_NAME
 bye
 EOF
   co_error_check $? "Failed to ${FTP_FUNCTION} file ${SOURCE_DIR}/${FILE_NAME} to ${FTP_TARGET_DIR}"   
}
# main function
echo "main before while"
while IFS="," read ipaddress username password
do
# ftp file from remote server to local server
 cd ${SOURCE_DIR}
 echo "ip address is ${ipaddress}"
 echo "username is ${username}"
 echo "password is ${password}"
 echo "ICOMS_FTP_TGT_DIR1 is ${ICOMS_FTP_TGT_DIR1}"
 echo "ICOMS_FTP_TGT_DIR2 is ${ICOMS_FTP_TGT_DIR2}"
 
ftp_data_file mput ${FILE_MASK}*.csv ${ipaddress} ${username} ${password} ${ICOMS_FTP_TGT_DIR1}
ftp_data_file mput ${FILE_MASK}*.csv ${ipaddress} ${username} ${password} ${ICOMS_FTP_TGT_DIR2}
done <$filename

Quote:
Content of filelist.txt:
--------------------
172.90.232.1,john,john
172.90.232.2,john,john
172.90.232.3,john,john
172.90.232.4,john,john
172.90.232.24,john,john

previous posting link is below:

https://www.unix.com/shell-programmin...parallely.html
# 2  
Old 03-01-2010
It's really hard to script FTP in the shell. It's really easy to script FTP in Perl: Perl Net::FTP
# 3  
Old 03-01-2010
something like this

Code:
#!/bin.ksh

function Init {
   comd="put myfile yourfile"
}

function FTP {

typeset host=$1
typeset acct=$2
typeset pass=$3
typeset comd=$4

ftp -v -n -d<<!
open ${host}
user root ${pass}
bin
hash
${comd}
bye
!

}

function Main {
   Init
   while read line; do
      host=$(echo "${line}" | cut -d, -f1,1)
      acct=$(echo "${line}" | cut -d, -f2,2)
      pass=$(echo "${line}" | cut -d, -f3,3)
      FTP ${host} ${acct} ${pass} "${comd}"
   done < filelist.txt
}
################################################################################
## main processing segment
################################################################################
Main


Last edited by radoulov; 03-01-2010 at 11:02 AM.. Reason: Please use code tags, thank you!
# 4  
Old 03-01-2010
I have zero knowledge in perl. And the scripts i have to be implemented in Unix Shell

Thanks for the reply

---------- Post updated at 09:48 AM ---------- Previous update was at 09:47 AM ----------

Thanks Tinwalrus,

I will try it now and let u know.
# 5  
Old 03-01-2010
There appear to be issues in the script with passing "*" in a parameter. You need ftp to expand the "*" not shell.

Quote:
ftp_data_file mput ${FILE_MASK}*.csv ${ipaddress} ${username} ${password} ${ICOMS_FTP_TGT_DIR1}
ftp_data_file mput ${FILE_MASK}*.csv ${ipaddress} ${username} ${password} ${ICOMS_FTP_TGT_DIR2}
ftp_data_file mput ${FILE_MASK}\*.csv ${ipaddress} ${username} ${password} ${ICOMS_FTP_TGT_DIR1}
ftp_data_file mput ${FILE_MASK}\*.csv ${ipaddress} ${username} ${password} ${ICOMS_FTP_TGT_DIR2}

Within the function:

Code:
local FILE_NAME="$2"

$FTP_FUNCTION "$FILE_NAME"

Just a visual check. Untested. There may be more.
# 6  
Old 03-01-2010
Quote:
Hi

I modified the code sent by us as below to execute in my environment. I got the error as below. Please let me know where i hae done wrong while i changed the code:
Using binary mode to transfer files.
---> USER root
331 Password required for root.
---> PASS XXXX
530-[compat]: 3004-300 You entered an invalid login name or password.


530 Login incorrect.
Login failed.
---> TYPE I
200 Type set to I.
Hash mark printing on (8192 bytes/hash mark).
mput /dwinput/AT/ICOM_SERV1? /dwinput/AT/ICOM_SERV1: No such file or directory
---> QUIT
221 Goodbye.
Quote:
My filelist.txt looks like below:
172.20.200.112,abcd,abcd
172.20.200.112,abcd,abcd
172.20.200.112,abcd,abcd
172.20.200.112,abcd,abcd
172.20.200.112,abcd,abcd
Code:
#!/usr/bin/ksh
export filename=/grid/PowerCenter/AT/filelist.txt
export SOURCE_DIR=/grid/PowerCenter/AT
export ICOMS_FTP_TGT_DIR1=/dwinput/AT/ICOM_SERV1
export ICOMS_FTP_TGT_DIR2=/dwinput/AT/ICOM_SERV2
export FILE_MASK="ATRPU_RP_ATU"

function Init {
comd="mput ${FILE_MASK}*.csv ${ICOMS_FTP_TGT_DIR1}"
}

function FTP {

typeset host=$1
typeset acct=$2
typeset pass=$3
typeset comd=$4


local SOURCE_DIR=${SOURCE_DIR}
   
ftp -v -n -d<<!
open ${host}
user root ${pass}
bin
hash
${comd}
bye
!

}

function Main {
Init
while read line; do
host=$(echo "${line}" | cut -d, -f1,1)
acct=$(echo "${line}" | cut -d, -f2,2)
pass=$(echo "${line}" | cut -d, -f3,3)
FTP ${host} ${acct} ${pass} "${comd}"
done < $filename
}
################################################################################
## main processing segment
################################################################################
Main



---------- Post updated at 10:35 AM ---------- Previous update was at 10:21 AM ----------

Quote:
Hi

I have modified the function as below and tried again and got the same error.
Code:
function Init {
comd="mput ${SOURCE_DIR}/${FILE_MASK}*.csv ${ICOMS_FTP_TGT_DIR1}"
}



---------- Post updated at 10:49 AM ---------- Previous update was at 10:35 AM ----------

Quote:
Hi

i believe it is facing problem to read comma delimited file

How to specify my file as comma delimited


---------- Post updated at 10:54 AM ---------- Previous update was at 10:49 AM ----------

Quote:
Hi

I have updated the script as below:
and getting the error as
---> SYST
215 UNIX Type: L8 Version: BSD-44
Remote system type is UNIX.
---> TYPE I
200 Type set to I.
Using binary mode to transfer files.
---> USER root
331 Password required for root.
---> PASS XXXX
530-[compat]: 3004-300 You entered an invalid login name or password.


530 Login incorrect.
Login failed.
---> TYPE I
200 Type set to I.
Hash mark printing on (8192 bytes/hash mark).
mput /grid/PowerCenter/AT/ATRPU_RP_ATU_00007_05022010125010.csv? ---> PORT 172,20,253,52,214,253
530 Please login with USER and PASS.

Code:
function Init {
comd="mput ${SOURCE_DIR}/${FILE_MASK}*.csv ${ICOMS_FTP_TGT_DIR1}"
}

function FTP {

typeset host=$1
typeset acct=$2
typeset pass=$3
typeset comd=$4


local SOURCE_DIR=${SOURCE_DIR}
  
cd ${SOURCE_DIR}

ftp -v -n -d<<!
open ${host}
user root ${pass}
bin
hash
${comd}
bye
!

}

function Main {
Init
while IFS="," read line; do
host=$(echo "${line}" | cut -d, -f1,1)
acct=$(echo "${line}" | cut -d, -f2,2)
pass=$(echo "${line}" | cut -d, -f3,3)
FTP ${host} ${acct} ${pass} "${comd}"
done < $filename
}
################################################################################
## main processing segment
################################################################################
Main



---------- Post updated at 11:05 AM ---------- Previous update was at 10:54 AM ----------

Hi Tinwalrus,

Can you help me where i am doing wrong in code.

Thanks
# 7  
Old 03-01-2010

As others have pointed out, the ftp command is not designed for scripting. Use scp if you can. Otherwise use the ncftp set of commands.
Quote:
Code:
function Main {
Init
while IFS=, read line; do
host=$(echo "${line}" | cut -d, -f1,1)
acct=$(echo "${line}" | cut -d, -f2,2)
pass=$(echo "${line}" | cut -d, -f3,3)
FTP ${host} ${acct} ${pass} "${comd}"
done < $filename
}


There's no need for an external command (cut):
Code:
Main() {
Init
while IFS="," read host acct pass
do
  FTP "$host" "$acct" "$pass" "$comd"
done < $filename
}

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need a Shell Script for FTP

Hello Brothers, I am new in shell script.I need a shell script that will run in Linux Server. Script will connect to windows FTP server before connection script will check the connection from linux server to windows server, if connection is ok then show a message and get specific file and... (34 Replies)
Discussion started by: maruf
34 Replies

2. UNIX for Dummies Questions & Answers

FTP in Shell Script

Dear All, I am using FTP in a script. But when i exit from the FTP session, the commands written after EOF don't get executed. i.e. ftp <<EOF quote $login quote $password cd /tmp mget *somefile* bye EOF echo $some_variable #This last echo command or whatever piece of commands i... (10 Replies)
Discussion started by: Salman786
10 Replies

3. Shell Programming and Scripting

Help With FTP Shell Script

So i Administer multiple ftp servers that run on dynamic IP's as well as user and password settings are changed by other people constantly. What i need to do is ensure that an FTP is server is up on the IP i check. As well as the login credentials work. Here is a simple script i wrote. However... (2 Replies)
Discussion started by: Noledge
2 Replies

4. Shell Programming and Scripting

FTP within a SHELL script

I am running the following on linux (on a mac): filename="/Users/thisfilename.txt" hostname="ftp.mysite.com" username="myusername" password="mypassword" echo '=======FTP========' ftp -un $hostname <<EOF quote USER $username quote PASS $password binary put $filename quit EOF I... (4 Replies)
Discussion started by: globalnerds
4 Replies

5. UNIX for Advanced & Expert Users

FTP in shell script

HI ALL i am writing a shell script in which i have to use FTP command like. FTP <ip address> cd xyz mget* bye but i am not able to perform any command from shell script. once the control goes to FTP, i again have to type all the things. i just want my shell script to take care of the... (8 Replies)
Discussion started by: infyanurag
8 Replies

6. Shell Programming and Scripting

ftp with shell script

Can I ftp to put file with shell script(as bath file) ? Plz give the simple code to do that. My script look like that #!/bin/sh echo "Start ftp" ftp temphost <<EOF put file quit EOF # end This code ignore username & password but I need to input. How to input username &... (8 Replies)
Discussion started by: aungomarin
8 Replies

7. Shell Programming and Scripting

FTP via shell script

Hi, I need to upload a file via ftp. I have given : ftp -n $HOST <<END quote user $USER quote pass $PASSWD prompt off put bus.txt quit END Its throwing a syntax error at "<<" symbol. What should be done for this ?? (2 Replies)
Discussion started by: risshanth
2 Replies

8. UNIX for Dummies Questions & Answers

Shell script for ftp

Hi ,, I am wrting a shell script to ftp a file from remote server but its giving some problem to me.can you help me in debugging this. #!/usr/bin/ksh HOST="some ip" user="user_name" passwd="password" ftp -n $HOST >>END_SCRIPT USER $user $passwd binary prompt get... (3 Replies)
Discussion started by: namishtiwari
3 Replies

9. Shell Programming and Scripting

ftp in shell script

Hi, I have to ftp to a remote machine. i have got the Ip, username and password and the file path.. I need to get the file name with out user intervention in my script.. is there any way to do this.. please help esham (2 Replies)
Discussion started by: esham
2 Replies

10. Shell Programming and Scripting

using ftp in a shell script.

I am trying to ftp some files from a certain directory, but i got an invalid command. does anybody know why i got this error? ftp -v -i -n <<SCRIPT open servername user username password cd /server/logs for file in MCWAS* do put ${file} /home/test/${file} done bye SCRIPT (2 Replies)
Discussion started by: caesarkim
2 Replies
Login or Register to Ask a Question