13232163126
高级会员
高级会员
  • 发帖数28
  • QQ2778146585
  • 金币138两
  • 威望237点
  • 钻石0枚
  • 注册日期2022-08-25
  • 最后登录2024-04-26
阅读:523回复:0

[资源分享]用shell脚本把erp服务器上的文件上传到ftp指定路径上

楼主#
更多 发布于:2023-02-07 13:46
用shell脚本把erp服务器上的文件上传到ftp指定路径上,下载的话调整一下命令即可




DATABASE ds
 
GLOBALS "../../config/top.global"
 
################################################################################
#
# Descriptions...: 上传文件到指定的FTP服务器上
# Input Parameter: p_host           STRING       FTP Server IP Address
#                  p_name           STRING       FTP User
#                  p_password       STRING       FTP Password
#                  p_remotedir      STRING       上传到服务器的目录
#                  p_saveasname     STRING       上传并保存的文件名
#                  p_localfile      STRING       上传文件的本地路径
# Return code....: LIKE type_file.num10
#                           0:成功
#                           1:连接失败
#                           2:登录失败
#                           3:服务器目录失败
#                           4:发送失败
#                           5:接受失败
#                           6:断开失败
################################################################################
FUNCTION aws_send_ftp(p_host,p_name,p_password,p_remotedir,p_saveasname,p_localfile)
DEFINE p_host            STRING,
       p_name            STRING,
       p_password        STRING,
       p_remotedir       STRING,
       p_saveasname      STRING,
       p_localfile       STRING
 
DEFINE l_ch              base.Channel
DEFINE ls_buf            STRING
DEFINE l_cmd             STRING
DEFINE lst_line          base.StringTokenizer
DEFINE li_i              LIKE type_file.num10
DEFINE li_j              LIKE type_file.num10
DEFINE ls_str            STRING
DEFINE li_err            LIKE type_file.num10
DEFINE li_flag           LIKE type_file.num10
DEFINE li_status         LIKE type_file.num10
DEFINE l_str             LIKE type_file.chr100
 
   LET l_cmd= "ftp -v -n"
             ," ",p_host.trim()
             ," ","<<EOF"
             ,"\n"
             ,"user"
             ," ",p_name.trim()
             ," ",p_password.trim()
             ,"\n"
             ,"binary"
             ,"\n"
             ,"cd"
             ," ",p_remotedir
             ,"\n"
             ,"prompt"
             ,"\n"
             ,"put"
             ," ",p_localfile
             ," ",p_saveasname
             ,"\n"
             ,"bye"
             ,"\n"
             ,"EOF"
 
   LET l_ch = base.Channel.create()
   CALL l_ch.setDelimiter("\n")
   CALL l_ch.openPipe(l_cmd,"r")
   LET li_i=1
   LET li_flag=FALSE
   LET li_err = 0
   LET li_status =1
   WHILE l_ch.read(ls_buf)
      DISPLAY ls_buf
      IF ( ls_buf.subString(1,4) NOT MATCHES "[0-9]*")
         THEN
            LET li_i = li_i + 1
            CONTINUE WHILE
      END IF
  
      LET lst_line = base.StringTokenizer.create(ls_buf, " ")
      LET li_j = 1
      WHILE lst_line.hasMoreTokens()
         LET ls_str = lst_line.nextToken()
         LET ls_str = ls_str.trim()
         LET l_str = ls_str
         SELECT SUBSTR(l_str,1,3) INTO l_str FROM dual #截取前三位
         LET ls_str = l_str
         CASE li_j
            WHEN 1
               CASE
                  WHEN (li_status= 1 AND ls_str="220")
                     LET li_status = 2          #连接成功
                  WHEN (li_status =2 AND ls_str="230")
                     LET li_status =3           #登录成功
                  WHEN (li_status =3 AND ls_str="250")
                     LET li_status =4           #改变目录成功
                  WHEN (li_status =4 AND ls_str="150")
                     LET li_status =5           #发送数据成功
                  WHEN (li_status =5 AND ls_str="226")
                     LET li_status =6           #接收数据成功
                  WHEN (li_status =6 AND ls_str="221")
                     LET li_status =0           #断开成功
               END CASE
         END CASE  
 
         LET li_j = li_j + 1
 
      END WHILE
    
      LET li_i = li_i + 1    
   END WHILE
   CALL l_ch.close()
  
   RETURN li_status
  
END FUNCTION
喜欢0 评分0
游客

返回顶部