歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

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

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