Linux下使用Shell腳本向FTP服務器上傳或下載一個文件
//ftpput.sh
- #!/bin/sh
- #FileName:ftpput.sh
- #Function:從本地客戶端向ftp服務器上傳一個文件
- #Version:V0.1
- #Author:Sunrier
- #Date:2012-07-20
-
- #$#表示傳遞給此Shell腳本的參數個數
- #-ne表示不等於
- if [ $# -ne 2 ]
- then
- echo "Usage $0 <local_dir/filename> <remote_dir>"
- exit 1
- fi
-
- #IP表示ftp的服務器ip地址
- IP=127.0.0.1
- #IP=192.168.6.1
-
- #FULLNAME獲取本地文件全路徑名
- FULLNAME=$1
-
- #DESTDIR獲取需要上傳的ftp遠程目錄路徑
- DESTDIR=$2
-
- #basename返回一個路徑中的文件名部分
- #如FULLNAME="/home/Sunrier/Proj/log/test.log";
- #當local_filename=`basename $FULLNAME`
- #最終local_filename="test.log"
- local_filename=`basename $FULLNAME`
-
- #DESTFILE表示ftp服務器的路徑,以及保存後的文件名
- DESTFILE=$DESTDIR/$local_filename
-
- #ftp -i -n $IP <<FTPIT
- ftp -i -n <<FTPIT
- open $IP
- user Sunrier RedHat
- bin
- passive
- cd /home/remote/log/ftpfile
- put $FULLNAME $DESTFILE
- quit
- FTPIT
-
- exit 0
//注釋:
- #!/bin/sh
- #FileName:ftpput.sh
- #Function:從本地客戶端向ftp服務器上傳一個文件
- #Version:V0.1
- #Author:Sunrier
- #Date:2012-07-20
-
- #$#表示傳遞給此Shell腳本的參數個數
- #-lt表示小於
- #-eq表示等於
- #-ne表示不等於
- if [ $# -ne 2 ]
- then
- echo "Usage $0 <local_dir/filename> <remote_dir>"
- exit 1
- fi
-
- #IP表示ftp的服務器ip地址
- #IP=127.0.0.1
- IP=192.168.6.1
-
- #FULLNAME獲取本地文件全路徑名
- FULLNAME=$1
-
- #DESTDIR獲取需要上傳的ftp遠程目錄路徑
- DESTDIR=$2
-
- #basename返回一個路徑中的文件名部分
- #如FULLNAME="/home/Sunrier/Proj/log/test.log";
- #當local_filename=`basename $FULLNAME`
- #最終local_filename="test.log"
- local_filename=`basename $FULLNAME`
-
- #DESTFILE表示ftp服務器的路徑,以及保存後的文件名
- DESTFILE=$DESTDIR/$local_filename
-
- #-i表示在多個文件傳輸期間關閉交互提示
- #-n表示禁止自動登錄到初始連接
- #<<FTPIT 和最後的 FTPIT:術語叫:當前文檔here documents. here document 就是一段特殊目的的代碼塊,
- #它使用I/O重定向的形式來將一個命令序列傳遞到一個交互程序或者命令中,比如ftp、cat,或者ex文本編輯器.
- #本句可以理解從<<FTPIT開始以非對話模式的ftp連接,直到輸入FTPIT為止的所有命令.
- #當然FTPIT這個名字是可以隨便取的,不一定必須是FTPIT,可以取其它的名字。
- #ftp -i -n $IP <<FTPIT
- ftp -i -n <<FTPIT
-
- #連接到指定ftp服務器上
- open $IP
- #連接到指定ftp服務器上,並指定端口
- #open $IP $PORT
-
- #登陸ftp服務器上的用戶名和密碼
- #user username password
- user Sunrier redhat
-
- #bin表示以二進制方式傳輸
- #bin等價於bi,binary等
- #另一種方式傳輸是ascii,默認情況下,將文件傳輸類型設置為ASCII
- bin
-
- #主動模式的FTP是指服務器主動連接客戶端的數據端口,被動模式的FTP是指服務器被動地等待客戶端連接自己的數據端口
- #被動模式的FTP通常用在處於防火牆之後的FTP客戶訪問外界FTP服務器的情況.
- #因為在這種情況下,防火牆通常配置為不允許外界訪問防火牆之後主機,而只允許由防火牆之後的主機發起的連接請求通過.
- #因此在這種情況下不能使用主動模式的FTP傳輸,而被動模式的FTP可以良好的工作.
- #passive表示設置為被動模式的FTP
- passive
-
- #cd表示更改ftp服務器上(即遠程計算機)的工作目錄
- cd /home/remote/log/ftpfile
-
- #lcd表示更改本地計算機的工作目錄
- #lcd /home/Sunrier/Proj/log/
-
- #put local_file [ remote_file ]
- #其中local_file是指定要復制的本地文件,remote_file是指定要復制的遠程計算機上的文件名,
- #remote_file為可選項,如果不指定的話是和本地計算機上的文件名同名.
- #put表示把本地路徑下的文件復制到FTP服務器(遠程計算機)上設置的路徑下的文件
- put $FULLNAME $DESTFILE
-
- #quit表示結束與遠程計算機的FTP會話,並退出FTP.
- #還有個等價的命令為bye(或by)結束與遠程計算機的FTP會話並退出FTP
- quit
-
- #here document塊結束
- FTPIT
-
- #正式寫這個Shell腳本時,here document中的#和空行都會執行,
- #所以為了消除警告最好去掉here document塊中#開頭的語句以及空行,
- #暫時我還沒有找到here document中有效的注釋語句的方法.
-
- exit 0