11

我是 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 变量中减去它时,它显然不兼容。

有人会善意地帮助我找到一种方法来让它正常工作吗?

4

4 回答 4

21

尝试

date -d '30 days ago'

应该在debian上做。

于 2013-01-19T17:33:48.007 回答
12

尝试这样做:

#!/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

于 2013-01-19T17:33:52.050 回答
1

您可以使用以下脚本:

#!/bin/bash
days=73
while [ ${days} -ge 0 ]; do
    date -d "${days} days ago" +'%F'
    days=$((days-1))
done
于 2019-12-12T06:39:06.570 回答
0

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

于 2013-01-19T17:38:04.237 回答