登录多个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编辑器里的一个命令:“删除行尾空格”,之后脚本二便能正常运行,登陆多台服务器下载数据。
虽然功能实现了,但是有个问题不明白:如果因为行尾有空格所以脚本不能正常运行,那么以上三种运行正常的情况都是在“删除行尾空格”之前运行的。为什么在循环内部就出错,在循环外部就没问题了呢?
如果您知道原因,麻烦您提醒一下,不胜感激!^_^