需求说明

最近在AIX上做开发,开发机器在office网段,测试机器在lab网段,不能互相通讯,只能通过特定的ftp来传文件。

每次上传的机器都要做:登录ftp,进入我的目录,上传;下载的机器都要做:登录ftp,进入我的目录,下载。以上动作每天都要做几十次,很蛋疼。

这个shell脚本的功能就是完成这些功能:登录ftp,进入我的目录,上传/下载某些文件。要传入一个参数,这个参数如果是“get”,那就从ftp下载;如果是“put”,那就上传到ftp。

因为从来没有用过shell脚本,所以将一些关键点记录下来,以便今后揣摩。

脚本代码

主要流程:

  1. 判断是不是有一个参数,参数是不是“get”或者“put”,不满足的话就打印错误并退出。
  2. 将登陆ftp,进入目录的动作写入一个临时的shell脚本。
  3. 如果参数是“get”,将下载所有文件的代码写入临时脚本。如果参数是“put”,取到本地文件夹的所有文件,逐个将上传代码加入临时脚本。
  4. 将断开ftp的代码写入临时文件。
  5. 执行临时文件并删除。
 #!/bin/sh

 if [ $# -ne  ] ; then
echo "parameter error"
exit
else
if [ $ != "get" ] && [ $ != "post" ] ; then
echo "parameter error"
exit
fi
fi ftp_host="10.204.16.2"
ftp_user="test"
ftp_password="testtest"
folder_local="/home/smld/sync"
folder_remote="/home/smid/frank/sync"
temp_shell="sync_temp.sh" cat > $temp_shell << EOF
ftp -v -n << !
open $ftp_host
user $ftp_user $ftp_password
lcd $folder_local
cd $folder_remote
bin
prompt off
EOF if [ $ = "get" ]; then
echo "add mget * into $temp_shell"
echo "mget *" >> $temp_shell
elif [ $ = "put" ]; then
for i in `ls $folder_local`; do
echo "add put $i into $temp_shell"
echo "put $i" >> $temp_shell
done
fi cat >> $temp_shell << EOF
quit
!
EOF chmod $temp_shell
echo "execute $temp_shell"
./$temp_shell
rm $temp_shell

代码详解

第1行

#!/bin/sh,用来指定shell的程序路径。

3-11行

if条件语句:

if [条件]; then
    elif [条件]; then
        else
        fi

判断数字是否相等:-eq(equal)-ne(not equal),其他大于小于也类似。

判断字符串时候相等:=(等于)!=(不等于)

条件直接的与或:&&(与)||(或) -a(and)-o(or)

传入参数用$1 $2 ... $9表示 ,$0表示脚本名,$@表示所有参数的数组(可以超过9个),$#表示参数个数。

13-18行

设置一些参数,参数赋值

20-28行

把一段内容输入到文件:cat 内容 > 文件名,用>会清空文件原来的内容,用>>会在文件后面追加。echo也有这样的功能。

将多行内容作为命令的输入,EOF只是一个标志,像21行换成!作用也是一样的:

命令 << EOF
        内容段
        EOF

ftp相关命令:

  • 选项-v:显示详细信息
  • 选项-n:关闭自动登录(open之后不会弹出提示输入用户名密码)
  • 连接某个ftp:open 主机名
  • 登录:user 用户名 密码
  • 指定本地目录:lcd 目录
  • 转成二进制传输:bin
  • 关闭主动模式(mget的时候不会逐个文件询问y/n):prompt off

30-38行

for循环:

for i in 集合; do
        done

集合可以使用命令的结果,用``把命令包起来,例如:`ls $folder_local`

[shell]用shell脚本将本地文件夹与ftp上的文件夹同步的更多相关文章

  1. 本地虚拟机中匿名ftp上传文件失败的问题

    在10.10.50.230中新建了一个匿名的ftp服务器,结果在10.10.50.241中上传文件时提示: local: README.txt remote: /var/ftp/pub/upload ...

  2. shell中利用ftp 上传文件夹功能

    我们知道ftp 只能用来上传或者下载文件,一次单个或者多个,怎么实现将文件夹的上传和下载呢? 可以利用先在remote ip上建立一个相同的文件夹目录,然后将文件放到各自的目录中去 1.循环遍历出要上 ...

  3. Shell脚本调用ftp上传文件

    Shell脚本调用ftp上传文件 1.脚本如下 ftp -n<<! open x.x.x.x ###x.x.x.x为ftp地址 user username password ###user ...

  4. 再看ftp上传文件

    前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在 ...

  5. 通过cmd命令到ftp上下载文件

    通过cmd命令到ftp上下载文件 点击"开始"菜单.然后输入"cmd"点"enter"键,出现cmd命令执行框 2 输入"ftp& ...

  6. Ftp上传文件

    package net.util.common; import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  7. PHP使用FTP上传文件到服务器(实战篇)

    我们在做开发的过程中,上传文件肯定是避免不了的,平常我们的程序和上传的文件都在一个服务器上,我们也可以使用第三方sdk上传文件,但是文件在第三方服务器上.现在我们使用PHP的ftp功能把文件上传到我们 ...

  8. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

  9. FTP上传文件到服务器

    一.初始化上传控件. 1.我们这里用dropzone.js作为上传控件,下载地址http://www.dropzonejs.com/ 2.这里我们使用一个div元素作为dropzone载体. < ...

随机推荐

  1. Session和几种状态保持方案理解

    一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的. session, ...

  2. Graying the black box: Understanding DQNs

    Zahavy, Tom, Nir Ben-Zrihem, and Shie Mannor. "Graying the black box: Understanding DQNs." ...

  3. 第三百零三节,Django框架介绍——用pycharm创建Django项目

    Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...

  4. e659. 缩放,剪取,移动,翻转图形

    AffineTransform tx = new AffineTransform(); tx.scale(scalex, scaley); tx.shear(shiftx, shifty); tx.t ...

  5. 在C语言中实现面向对象(2)

    C语言是结构化和模块化的语言,它是面向过程的.但它也可以模拟C++实现面向对象的功能.那么什么是对象呢?对象就是一个包含数据以及于这些数据有关的操作的集合,也就是包含数据成员和操作代码(即成员函数). ...

  6. par函数的new 参数-进行图片的叠加

    默认调用高级绘图函数的时候,会另外在绘制一副图,为了将两幅图绘制在同一张纸上,可以设置new = TRUE 代码示例: plot(1:5, c(2,3,2,3,2), col = "red& ...

  7. 【Java面试题】43 说出一些常用的类,包,接口,请各举5个

    要让人家感觉你对java ee开发很熟,所以,不能仅仅只列core java中的那些东西,要多列你在做ssh项目中涉及的那些东西.就写你最近写的那些程序中涉及的那些类. 常用的类:BufferedRe ...

  8. iOS 数据压缩与解压

    转自: http://blog.csdn.net/dkq972958298/article/details/53321804 在实际开发中,我们经常要对比较大的数据进行压缩后再上传服务器,下面是我在项 ...

  9. 【R】array 2 string

    paste(1:10, collapse = '') http://stackoverflow.com/questions/2098368/how-do-i-concatenate-a-vector- ...

  10. 属性编辑器,即PropertyEditor-->Spring IoC

    在Spring配置文件里,我们往往通过字面值为Bean各种类型的属性提供设置值:不管是double类型还是int类型,在配置文件中都对应字符串类型的字面值.BeanWrapper填充Bean属性时如何 ...