在shell脚本中,我需要将1个文件从1台UNIX服务器传输到另一台UNIX服务器。所以我们需要检查文件大小和目标服务器的可用磁盘大小。如果文件大小大于磁盘可用大小,则作业应失败。所以我回显两个值,但在if else条件下,它不能正常工作。
#!/bin/bash
DIR=${1}
FILE=${2}
SFTP_USER=${3}
SFTP_PATH=${4}
SFTP_HOST=${5}
SFTP_PORT=${6}
tgt_path=${7}
FILE_SIZE=`stat -c %s ${DIR}/${FILE}`
echo "Size of the file = $FILE_SIZE"
sftp -o BatchMode=yes -oPort=${SFTP_PORT} ${SFTP_USER}@${SFTP_HOST} <<EOF > ${DIR}/logs/script_wr.log
cd ${SFTP_PATH}
mkdir ${tgt_path}
DISK_AVAIL_SIZE=`df -B1 ${SFTP_PATH}/${tgt_path}`
echo "Disk Available size = ${DISK_AVAIL_SIZE}"
if [ ${FILE_SIZE} -lt ${DISK_AVAIL_SIZE} ]
then
put ${DIR}/${FILE} ${SFTP_PATH}/${tgt_path}
ls -l ${SFTP_PATH}/${tgt_path}/${FILE}
else
echo "Job got failed as File size is greater than the disk available size of target server."
exit 1
fi
EOF
...............
echo "File transfer has been completed successfully for the file ${FILE}."
在这个脚本中,当我调试它,然后磁盘可用大小无法生成的目标服务器使用sftp连接&如果其他条件if [ ${FILE_SIZE} -lt ${DISK_AVAIL_SIZE} ]
在这里不正常工作。当我放置100MB文件的temp.txt &磁盘可用大小为85MB时,它只移动85MB文件,而不是整个文件。请你帮我在这里打印磁盘可用大小的目标服务器&如果条件应该在这里正常工作的脚本。
2条答案
按热度按时间mbyulnm01#
因为你不能比较一个服务器的文件大小和另一个服务器的可用磁盘大小。你可以做一件事,把目标服务器的磁盘可用大小变量(例如:- $DISK_AVAIL_SIZE),然后你可以比较主服务器的文件大小。文件大小(stat -c %s)将以字节为单位给予大小,其中
df ${SFTP_PATH}
将以kb为单位给出磁盘可用大小,因此您必须将文件大小转换为kb,只需将文件大小除以1024。然后你可以比较文件大小和磁盘可用大小。
9q78igpj2#
$FILE_SIZE是存在于一台机器上的变量,$DISK_AVAIL_SIZE应该存在于另一台机器上。你不能在两台不同的机器上比较两个变量。
事实上,使用
<<EOF
语法在将文档发送到另一台机器之前,扩展了文档的某些部分。特别是,所有未转义的变量以及反引号都将被展开。因此,发送到另一台机器的代码会看到
或者命令的输出 * 在源机器上 *。
反斜杠的反引号和反斜杠的美元符号,以防止扩大。