2013-01-19 11 views
5

Jestem nowy w bashu i powłoce, ale korzystam z instalacji debian i próbuję utworzyć skrypt, który może znaleźć datę w przeszłości bez konieczności instalowania dodatkowych pakietów. Od tutoriali Mam do tego etapu:Powłoka Bash Aktualna data Minus Liczba dni

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

Gdzie jestem utknięcie jest fakt, że moje „dzień” jest tylko numer 30 i isnt datetime formattted, więc kiedy przyszedł do minus to ze zmiennej CurrentDate to oczywiście nie jest zgodne.

Czy ktoś byłby na tyle uprzejmy, aby pomóc mi znaleźć sposób na sprawne działanie?

Odpowiedz

7

Spróbuj zrobić tak:

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

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

15

Spróbuj

date -d '30 days ago' 

powinien zrobić na Debianie.

0

Można zmodyfikować skrypt Pythona zamiast - w ten sposób nie będzie zależeć od konkretnej implementacji date