最近需要写一个从 FTP 服务器下载文件和向 FTP 服务器上传文件的 shell 脚本,但是自己在写 shell 脚本方面的经验比较少,因此将最终完成的脚本源码记录在此,方便以后学习参考。
FTP 服务器可以自己在 Windows 系统中搭建一个,很简单,网上有很多教程。服务器搭建好以后就可以在 Linux 上用 FTP 客户端去连接和进行各种操作了。这里需要注意的是,有的 Linux 版本,比如 Redhat,自带的 FTP 客户端有两个,如下:
通过 which ftp 命令可以看到 Redhat 默认使用的 ftp 是 /usr/kerberos/bin/ftp,但是参考 centos、Ubuntu 后我发现使用 /usr/bin/ftp 的更为普遍,这两者是有差别的。因此出于兼容性方面的考虑,此 shell 脚本使用的也是 /usr/bin/ftp,在源码中我直接用的全路径来指定。(温馨提示:网上搜索 Linux 各个系统版本时,用「操作系统名 + “镜像”」更容易搜出想要的结果,例如:Ubuntu 镜像)
整个脚本完成的操作具体可分为三步。
第一步是从 FTP 服务器的一个文件夹中下载符合要求的文件(比如 xml 格式的文件),放到 Linux 本地对应的文件夹中,以备主程序做后续业务的处理。
第二步是将下载下来的这些文件再上传到 FTP 服务器的另外的与之前不同的文件夹下。
第三步将 FTP 服务器上最初的文件删除。
流程图如下:
shell 脚本源码如下:
1 | !/bin/bash |
将连接 FTP 服务器的操作单独抽出作为一个 ftp_cmd 函数的原因主要有两个:
1.代码复用;
2.shell 不识别 ftp 命令,需要用重定向(”<<”)把 ftp 命令传给 ftp。
(完)