需求说明

最近在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. 关于Cocos2d-x中文乱码问题的解决

    方法一: 1.首先,复制下面的代码,创建一个icov,h的头文件,并放在项目目录下 #include "stdlib.h"#include "string.h" ...

  2. nginx反向代理压测问题记录

    使用nginx反向代理压测web程序,100个用户并发时,每隔一段时间loadrunner工具中就会报错,报错信息如下: Continuing after Error -26610: HTTP Sta ...

  3. android ContentProvider 笔记

    学习android的contentprovider.笔记记录于此. contentprovider作用是将数据共享给其他的应用. 参考链接 https://www.tutorialspoint.com ...

  4. 【转】IIS日志-网站运维的好帮手

    对于一个需要长期维护的网站来说,如何让网站长久稳定运行是件很有意义的事情. 有些在开发阶段没有暴露的问题很有可能就在运维阶段出现了,这也是很正常的. 还有些时候,我们希望不断地优化网站,让网站更快速的 ...

  5. CentOS6.8安装mysql并设置字符集编码

    一.安装: 1. 首先以root用户进入系统 2. 输入命令: yum install mysql mysql-server -y 等待安装完成. 3. 启动MySQL,输入命令: /etc/init ...

  6. c++ 类型定义

    1. typedef map<int, CString> UDT_MAP_INT_CSTRING; UDT_MAP_INT_CSTRING enumMap;

  7. js 文件下载

    工程WebApi: 点击按钮执行的handler exportClick() { var profile = { content: this.state.profile, type: MappingT ...

  8. error C2065:!错误:未定义标识符“pBuf);”

    error C2065: “pBuf):”: 未声明的标识符 错误原因:第二个括号)使用的是中文符号!还有最后那个分号! 改回来就好了~ 原错误: 修正后错误消失:

  9. JavaScript ES2015

    <button>一</button> <button>二</button> <button>三</button> <but ...

  10. Git高级操作

    本文是在Git操作指南基础上衍生出来的高级操作,如果你对git不是很熟悉,建议你先阅读Git操作指南. 一.忽略提交特定文件 如果你不想让一些文件上传到git仓库中,可以让Git忽略特定文件或是目录, ...