1. ftp自动登录批量下载文件。

#####从ftp服务器上的/home/data 到 本地的/home/databackup####
#!/bin/bash
ftp -n<<!
open 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
mget *
close
bye
!
2. ftp自动登录上传文件。

####本地的/home/databackup to ftp服务器上的/home/data####
#!/bin/bash
ftp -n<<!
open 192.168.1.171
user guest 123456
binary
hash
cd /home/data
lcd /home/databackup
prompt
mput *
close
bye
!

3. ftp自动登录下载单个文件。
####ftp服务器上下载/home/data/a.sh to local /home/databackup####
#!/bin/bash
ftp -n<<!
open 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
get a.sh a.sh 
close
bye
!

4. ftp自动登录上传单个文件。
####把本地/home/databachup/a.sh up ftp /home/databackup 下####
#!/bin/bash
ftp -n<<!
open 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
put a.sh a.sh 
close
bye
!

"!"一定要在首行
小结:把以上脚本另存为文件加入到crontab中即可实现ftp自动上传、下载文件。
注解:
1. -n 不受.netrc文件的影响。(ftp默认为读取.netrc文件中的设定)
2. << 是使用即时文件重定向输入。
3. !是即时文件的标志它必须成对出现,以标识即时文件的开始和结尾。

-----------------------------------------------------------------------------------------------

在windows下非常简单,windows下的ftp客户端有一个-s参数可以带一个文件,把所有在ftp命令行下要输入的内容照原样输入到这个文件中,用ftp -s去执行就可以。例如:
open 10.60.56.90
whb
123456
get test
close
bye
把这个文件保存为autologin.txt。
E:/>ftp -s:autologin.txt
ftp> open 10.60.56.90
Connected to 10.60.56.90.
220 (vsFTPd 2.0.5)
User (10.60.56.90:(none)):
331 Please specify the password.

230 Login successful.
ftp> get test
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for test (5 bytes).
226 File send OK.
ftp: 收到 5 字节,用时 0.00Seconds 5000.00Kbytes/sec.
ftp> close
221 Goodbye.
ftp> bye

E:/>
如果是匿名登录,密码那一行留空。

在linux下,上面的方法失效。Bruce Ediger在http://www.stratigery.com//scripting.ftp.html这篇文章中详细介绍了在shell脚本中使用ftp的方法。简单总结如下:
方法一:
#!/bin/bash 
SERVER=server
USERNAME=username
PASSWORD=password
ftp -n $server <<SCRIPT 
quote USER $username
quote PASS $password
cd remote_path
lcd local_path
binary 
verbose 
get something
put something
close 
quit 
SCRIPT 
方法二:
#!/bin/bash 
SERVER=server
USERNAME=username
PASSWORD=password
ftp -n $server <<SCRIPT 
user $USERNAME $PASSWORD
cd remote_path
lcd local_path
binary 
verbose 
get something
put something
close 
quit 
SCRIPT 
方法三:使用.netrc
可以用man netrc看这个文件的配置参数。比如写如下的.netrc文件:
machine whb 
login whb 
password 123456 
 
machine node6 
login globus 
password 123456 
需要注意的是,如果在.netrc文件中使用password设置了ftp登录密码,那么除该文件所有者外,其他用户对该文件都不能有读权限,否则自动登录会失败。
[whb@jcwkyl ~]$ chmod 600 .netrc 
[whb@jcwkyl ~]$ ftp node6 
Connected to node6.jlu.edu.cn. 
220 (vsFTPd 1.1.3) 
530 Please login with USER and PASS. 
530 Please login with USER and PASS. 
KERBEROS_V4 rejected as an authentication type 
331 Please specify the password. 
230 Login successful. Have fun. 
Remote system type is UNIX. 
Using binary mode to transfer files. 
ftp>

另外,网上有众多使用expect实现的方法,可以google到。

ftp在shell脚本中的使用方法的更多相关文章

  1. linux c程序中获取shell脚本输出的实现方法

    linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作. ...

  2. Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载

    Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数 ...

  3. Shell脚本中执行sql语句操作mysql的5种方法【转】

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  4. 学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  5. Shell脚本中调用另外一个脚本的方法

    (转载): 在Linux平台上开发,经常会在console(控制台)上执行另外一个脚本文件,经常用的方法有:./my.sh 或 source my.sh 或 . my.sh:这三种方法有什么不同呢?我 ...

  6. [转]Shell脚本中获取SELECT结果值的方法

    http://blog.itpub.net/13885898/viewspace-1670297/ 有时候我们可能会需要在Shell脚本中执行SELECT语句,并将结果赋值给一个变量,对于这样的情形, ...

  7. Shell脚本中引用、调用另一个脚本文件的2种方法

    Shell脚本中引用.调用另一个脚本文件的2种方法 http://www.jb51.net/article/67903.htm

  8. Shell脚本中判断输入变量或者参数是否为空的方法

    shell判断一个变量是否为空方法总结 https://www.jb51.net/article/154835.htm 1.判断变量 复制代码代码如下: read -p "input a w ...

  9. SHELL脚本中执行SQL语句操作MYSQL的5种方法

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

随机推荐

  1. 不安装Oracle客户端远程连接Orcale数据库

    本方法是通过使用ORACLE官方提供的精简版客户端,即绿色免安装的客户端. 下载地址(此处提供的是官方各版本下载地址): Windows 32位系统中使用的客户端下载地址其他系统环境中使用的客户端下载 ...

  2. JavaScript 函数参数是传值(byVal)还是传址(byRef)?

    对于“JavaScript 函数参数是传值(byVal)还是传址(byRef)”这个问题,普遍存在一个误区:number,string等“简单类型”是传值,Number, String, Object ...

  3. uuid-不好之处

    数据库中直接存储UUID的坏处: 完全‘随机’的字符串,例如由MD5().SHA1().UUID()产生的.它们产生的每一个新值都会被任意地保存在很大的空间范围内, 这会减慢INSERT及一些SELE ...

  4. SSH Tunneling Explained

    转载: http://chamibuddhika.wordpress.com/2012/03/21/ssh-tunnelling-explained/ March 21, 2012 by Buddhi ...

  5. UNIX command Questions Answers asked in Interview

    UNIX or Linux operating system has become default Server operating system and for whichever programm ...

  6. 第一个java程序(hdu 1001)

    //package yy;不能有 import java.util.*; public class Main {//必须为Main public static void main(String[] a ...

  7. 对于linux下system()函数的深度理解(整理)

    原谅: http://blog.sina.com.cn/s/blog_8043547601017qk0.html 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同 ...

  8. ASP.NET并发处理

    http://blog.csdn.net/hliq5399/article/details/6280288

  9. 利用BBRSACryptor实现iOS端的RSA加解密

    背景 RSA这种非对称加密被广泛的运用于网络数据的传输,但其在iOS上很难直接实现,BBRSACryptor框架通过移植openssl实现了iOS端的RSA,本文将介绍如何使用BBRSACryptor ...

  10. JQuery与DOM中的区别

    一.Query与DOM的区别 1.页面加载: DOM:window.onload=function(){}; JQuery:$(function(){ }); 2.获取对象:JQuery中有“#” D ...