登录多个ftp服务器下载文件

 

登录多个ftp

有多个ftp服务器,登录并下载文件。将所有ftp服务器的IP地址放在一个配置文件里,脚本读取该文件并获得所需信息,执行登录命令。

#!/usr/bin/sh

set -x

 

HOME_DIR=/metrica/parsers/program

SRC_DIR=/export/pm_data

DEST_DIR=/metrica/parse

#配置文件目录

SERVER_CFG="$HOME_DIR/ftp_server.config"

 

#get the time---hour

year=`date +%Y%m%d | cut -c1-4`

month=`date +%Y%m%d | cut -c5-6`

day=`date +%Y%m%d | cut -c7-8`

hour=`date +'%H'`

hour=`expr $hour - 2`

#construct the file path,the dest dictory

DATA_DIR=${SRC_DIR}/pmfilegen_$year$month$day

 

#read the congfig file to get other global variales

echo $SERVER_CFG

cat $SERVER_CFG|grep -v "#"|while read  line

do

#ftp服务器IP地址

omcid=`echo $line | cut -c13-25`

echo [$omcid]

ftp -n <<-****

open ${omcid}

user ftpuser ftpuser

cd $DATA_DIR

lcd $DEST_DIR

prompt

mget *$hour*.data

bye

****

sleep 1

echo "(`date +%Y%m%d%H%M`) pmdata has been collected!"

done

该脚本是在UE编辑器里编写的。编写完成后运行,出现错误——“文件结束”非期望的。看到有人建议:所有ftp代码顶格写,故脚本中的while循环内部没有缩进。但是错误仍然存在且没有改变。

l         如果注释掉ftp –n << -***,则不会出现此错误,当然其他的逻辑错误相应出现。

l         如果去掉while循环,直接给变量omcid赋值,程序能正常运行。

l         如果保持while循环屏蔽掉其中的ftp代码,程序运行正常

l         如果保持while循环,将ftp代码部分放在循环外部,程序运行正常

以上三种正常的运行情况只能登陆一个ftp服务器,不能完成登录多台服务器并下载文件的目的。

同事也不理解。无意间执行了UE编辑器里的一个命令:“删除行尾空格”,之后脚本二便能正常运行,登陆多台服务器下载数据。

虽然功能实现了,但是有个问题不明白:如果因为行尾有空格所以脚本不能正常运行,那么以上三种运行正常的情况都是在“删除行尾空格”之前运行的。为什么在循环内部就出错,在循环外部就没问题了呢?

如果您知道原因,麻烦您提醒一下,不胜感激!^_^

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值