执行一个函数将文件放在unix中

时间:2014-03-04 12:33:34

标签: shell unix

sftp_upload()   
{
  destination_server=$1 
  destination_path=$2
  destination_file_name=$3
  source_path=$4
  source_file_name=$5
  log_filename=$6
  port_number=$7

  if [ -z "$port_number" ] ; then 
    /usr/local/bin/sftp \
      $SFTP_OPTIONS \
        $SFTP_USERNAME@${destination_server} >> \
          ${log_filename} <<EOF 2>>${log_filename}
  else
    /usr/local/bin/sftp $SFTP_OPTIONS \
      -oPort=${port_number}$SFTP_USERNAME@${destination_server} >> \
        ${log_filename} <<EOF 2>>${log_filename}
  fi
lcd ${source_path}
cd ${destination_path}
put $source_file_name $destination_file_name
quit
fi
EOF
}

脚本中的上述函数在第101行显示错误'}'

我的问题是如何在没有传递端口号的情况下在if条件下连接sftp以及它是否被传递以及如何传递?

1 个答案:

答案 0 :(得分:2)

here document始终在具有<<EOF重定向的命令之后直接启动。 因此,您的else ... fihere-document吞没。

将命令移到if语句之外:

sftp_upload () {

  destination_server=$1 
  destination_path=$2
  destination_file_name=$3
  source_path=$4
  source_file_name=$5
  log_filename=$6
  port_number=$7
  PORT=""

if [ -n "$port_number" ] ; then
    PORT="-oPort=${port_number}"
fi

  /usr/local/bin/sftp \
    $SFTP_OPTIONS \
      $PORT \
        ${SFTP_USERNAME}@${destination_server} >> \
          ${log_filename} 2>&1 <<EOF
lcd ${source_path}
cd ${destination_path}
put $source_file_name $destination_file_name
quit
fi
EOF
}

如果$PORT为空,则sftp命令将仅在默认端口(22)上连接。