2017-08-06 3 views
1

Ich versuche, die Monatsnummer des letzten Montag dieser Woche. Ich habe es überprüft, um welchen Wochentag es sich handelt, und wenn es nicht Montag ist, dann subtrahiere x Tage und setze dieses neue Datum als Variablenwert.Format Datum Variable in Shell-Skript

Worauf ich Probleme habe, ist die Formatierung dieser Variablen, um nur den Monat zu erhalten. Alles funktioniert bis auf die vorletzte Zeile.

startDate=$(date) 
weekDayNum=$(date +'%u') # 1 is Monday 

# If today is NOT Monday 
if [ weekDayNum > 1 ]; 
then 
    # Get the date for the last Monday 
    newWeekDayNum=$(($weekDayNum-1)) 

    startDate=$(date -j -v-${newWeekDayNum}d) 
fi 

month=$(date -d "$startDate" +'%m') 
echo $month``` 

Antwort

1

[ weekDayNum > 1 ] prüft nicht auf numerischer Reihenfolge. Verwenden Sie [ $weekDayNum -gt 10 ] (Sie haben auch nicht auf den Wert Ihrer Variablen weekDayNum zugegriffen).

Es scheint, Sie haben das Format-String in der BSD Variante date liefern:

Dies funktioniert für mich:

#!/usr/bin/env bash                                                 

LANG=C                                                    
startDate=$(date)                                                 
weekDayNum=$(date +'%u') # 1 is Monday                                            

# If today is NOT Monday                                               
if [ $weekDayNum -gt 1 ];                                               
then                                                    
    startDate=$(date -j -v "-$(($weekDayNum - 1))d")                                        
fi                                                     

month=$(date -j -f "%a %b %d %T %Z %Y" "${startDate}" +'%m')                                      
echo $month  
+1

'-V' in BSD verwendet, das, was macOS ist/OS X verwendet .. –

+0

Danke: Bearbeitet. –

0

Verwenden expr es Zahl zu konvertieren.

month=$(date -d "$startDate" +'%m') 
month=$(expr $month + 0) 
echo $month 

Ausgang:

8