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以及它是否被传递以及如何传递?
答案 0 :(得分:2)
here document
始终在具有<<EOF
重定向的命令之后直接启动。
因此,您的else
... fi
被here-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)上连接。