【问题标题】:Bash Shell Current Date Minus Number of DaysBash Shell 当前日期减去天数
【发布时间】:2013-01-03 05:24:29
【问题描述】:

我是 bash 和 shell 的新手,但我正在运行 debian 安装,并且我正在尝试制作一个脚本,该脚本可以找到过去的日期,而无需安装任何其他软件包。从教程我已经到了这个阶段:

#!/bin/sh
#
# BACKUP DB TO S3
#

# VARIABLES
TYPE="DATABASE"
DAYS="30"

# GET CURRENT DATETIME
CURRENTDATE="$(date +%Y%m%d%H%M%S)"

# GENERATE PAST DATE FROM DAYS CONTSTANT
OLDERDATE=`expr $CURRENTDATE - $DAYS'

# CALL PYTHON SCRIPT WITH OLDERDATE ARGUMENT
python script.py $OLDERDATE

我卡住的地方是我的“天数”只是数字 30 并且没有格式化日期时间,所以当我从 currentdate 变量中减去它时,它显然不兼容。

有没有人好心帮我想办法让它正常工作?

【问题讨论】:

    标签: bash shell datetime debian


    【解决方案1】:

    试试

    date -d '30 days ago'
    

    应该在 debian 上做。

    【讨论】:

      【解决方案2】:

      尝试这样做:

      #!/bin/sh
      #
      # BACKUP DB TO S3
      #
      
      # VARIABLES
      TYPE="DATABASE"
      DAYS="30"
      
      # GET CURRENT DATETIME
      CURRENTDATE="$(date +%Y%m%d%H%M%S)"
      
      # GENERATE PAST DATE FROM DAYS CONSTANT
      OLDERDATE="$(date "+%Y%m%d%H%M%S" -d "$DAYS days ago")"
      
      # CALL PYTHON SCRIPT WITH OLDERDATE ARGUMENT
      python script.py "$OLDERDATE"
      

      info coreutils 'date invocation' | less +/28.7\ Relative\ items\ in\ date\ strings

      【讨论】:

        【解决方案3】:

        您可以使用以下脚本:

        #!/bin/bash
        days=73
        while [ ${days} -ge 0 ]; do
            date -d "${days} days ago" +'%F'
            days=$((days-1))
        done
        

        【讨论】:

          【解决方案4】:

          您可以改为修改 python 脚本 -- 这样您就不会依赖于 date 的特定实现

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-04-29
            • 2017-04-28
            • 1970-01-01
            • 2020-05-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多