我尝试每天使用时间戳来旋转日志文件。存储最后一个日期字符串然后为我的无限循环(当前每5分钟休眠)生成一个新日期并比较两者。如果它们相同,则它在同一天写入同一日志文件。如果值不同,则写入新日志文件但在发生新写入之前,请在前一天写入tar。 我的日期字符串有效性条件并非按照我的预期进行评估,而且我在问这是为什么:
lastdate=$(date +%Y%m%d)
while true
do
curdate=$(date +%Y%m%d)
echo "${lastdate}, ${curdate}"
if [ "$lastdate" != "$curdate" ]; then
## do tar
lastdate="$curdate"
fi
du >> "disk_du_${lastdate}.log"
sleep 300
done
对于有问题的部分,我的echo语句将两个字符串显示为具有相同的值,但条件总是运行,即使我正在测试不等式(或至少是那个意图)。我尝试了不同的条件变体:
if [[ "$lastdate" != "$curdate" ]]; then
if [ $lastdate != $curdate ]; then
if [[ $lastdate != $curdate ]]; then
if [ "${lastdate}" != "${curdate}" ]; then
...但是条件总是运行,即使字符串始终显示相同的值。我基于http://tldp.org/LDP/abs/html/comparison-ops.html构建了条件,例7-5,所以我希望有人可以告诉我我做错了什么。 TIA。
答案 0 :(得分:1)
我建议你检查一下你的BASH
TEST:
GNU bash,版本4.3.11(1)-release(x86_64-pc-linux-gnu)
它的工作:
#!/bin/bash
lastdate=$(date +%Y%m%d)
while true
do
curdate=$(date +%Y%m%d)
echo "${lastdate}, ${curdate}"
if [ "$lastdate" != "$curdate" ]; then
## do tar
lastdate="$curdate"
echo "TRUE"
else
echo "FALSE"
fi
sleep 5
done
OUT:
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE
20180404, 20180404
FALSE