#!/bin/bash
while read server <&3; do #read server names into the while loop
if [[ ! $server =~ [^[:space:]] ]] ; then #empty line exception
continue
fi
echo "Connecting to - $server"
#ssh "$server" #SSH login
while read updatedfile <&3 && read oldfile <&4; do
echo Comparing $updatedfile with $oldfile
if diff "$updatedfile" "$oldfile" >/dev/null ; then
echo The files compared are the same. No changes were made.
else
echo The files compared are different.
# copy the new file and put it in the right location
# make a back up of the old file and put in right location (time stamp)
# rm the old file (not the back up)
#cp -f -v $newfile
# ****************************
mv $oldfile /home/u0146121/backupfiles/$oldfile_$(date +%F-%T)
# ****************************
fi
done 3</home/u0146121/test/newfiles.txt 4</home/u0146121/test/oldfiles.txt
done 3</home/u0146121/test/servers.txt
*
之间的界限是我的脚本出现问题的地方。它将输出包含日期和文件名的文件。它只使用日期。我希望它能做到这两点。
答案 0 :(得分:7)
变量名称可能包含下划线,因此在裸变量名称后不能立即使用下划线。在您的情况下,您实际上在目标文件名中使用(未定义的)变量$oldfile_
,以便将新名称构造为“空字符串+日期”。将变量名称放在大括号
mv $oldfile /home/u0146121/backupfiles/${oldfile}_$(date +%F-%T)
并且重命名应该按预期工作。