BASH - 比较Date的字符串输出

时间:2018-04-03 21:02:56

标签: bash shell scripting sh

我尝试每天使用时间戳来旋转日志文件。存储最后一个日期字符串然后为我的无限循环(当前每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。

1 个答案:

答案 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