歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Linux下使用Shell腳本向FTP服務器上傳或下載一個文件

Linux下使用Shell腳本向FTP服務器上傳或下載一個文件

日期:2017/3/1 10:13:20   编辑:SHELL編程

Linux下使用Shell腳本向FTP服務器上傳或下載一個文件

//ftpput.sh

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