基于日期的bash脚本计数器算法

时间:2017-05-26 14:41:07

标签: bash

我想知道根据日期在bash中实现计数器的最佳方法。例如,如果今天的日期是5-26-17,则每次运行bash脚本时计数器都会递增(从0开始)。因此,如果脚本运行24次(每小时一次),则计数器将为24.现在我们将转到第二天5-27-17,我想将计数器重置为0并在每次脚本时开始递增跑了。

我首先想到的是用bash脚本解决这个问题,就是运行date实用程序并根据当前日期创建一个文件。创建文件后,使用该文件跟踪计数器值。有没有更好的方法来实现这个?

我正在尝试做的基本上是使用键值对的同义词。键是今天的日期,值是脚本运行的次数。

我的解决方案:

# Create a counter file to keep track of how many times the script
# was run each day.
  DATE_COUNTER_FILE=$(date "+%m-%d-%Y").counter
  COUNTER=1;
  if [ -f $DATE_COUNTER_FILE ]; then
    COUNTER=`cat $DATE_COUNTER_FILE`
    ((COUNTER+=1))
    echo $COUNTER > $DATE_COUNTER_FILE
  else
    touch $DATE_COUNTER_FILE
    echo $COUNTER > $DATE_COUNTER_FILE
  fi;

1 个答案:

答案 0 :(得分:2)

不确定此类内容是否对您有所帮助:

#!/bin/bash
if [$day == ""]; then day=$(date +"%d"); fi
if [$month == ""]; then month=$(date +"%m"); fi
if [$year == ""]; then year=$(date +"%Y"); fi
# ...
# DO YOUR STUFF WITH NUMBERS
# ...
export day=${day}
export month=${month}
export year=${year}

第一部分将日期数据存储在变量中,但仅限于尚未设置变量的情况。然后用简单的数学运算完成你想做的事情(为此目的使用 expr )。然后将变量导出为环境变量,以便在下次执行脚本时找到它们。

如果您需要在关机或重启后仍保持数据存活,则需要将数据导出到文件中。

如果您需要每天重置数据,可以添加一个变量(我今天称之为 )并制作如下脚本:

#!/bin/bash
if ([ "$today" != "" ] && [ "$today" != $(date +"%d") ]); then day="" && month="" && year=""; fi
if [ "$day" == "" ]; then day=$(date +"%d") && today=$(date +"%d"); fi
if [ "$month" == "" ]; then month=$(date +"%m"); fi
if [ "$year" == "" ]; then year=$(date +"%Y"); fi
# ...
# DO YOUR STUFF WITH NUMBERS
# ...
export day=${day}
export month=${month}
export year=${year}

这样,脚本将每天重置变量$ day $ month和$ year。