Datum: Monat erhöhen

D

drm

Eroberer
Hallo!
Ich bin immer noch blutiger Anfänger und habe noch eine Frage. Ich möchte den Monat um eins erhöhen, wenn dieser mehr als 15 Tage hat. Ich habe versucht es so zu lösen:

Code:
tag="$(date +%d)"

if $tag<15; then
monat="$(date +%m)"
else
monat="$(date +%m)"
monat=$((monat + 1))
fi

echo $monat

Leider erhalte ich dabei diese Fehlermeldung:
cannot open

Was mache ich falsch? Ich nutze hier die korn-Shell!
 
Deine if-Bedingung stimmt nicht. Da ich nicht die ksh habe, hier die Lösung für die bash. Vielleicht funktioniert sie auch in der ksh.

Code:
if [ $tag -gt 15 ]; ...

Mehr darüber in "man test".
 
Hallo,

Xanti war schneller ;)

Wenn ich aber schon am Schreiben bin, würde ich Dir raten, Dein Skript ein bisschen sauberer zu strukturieren. Manches ist überflüssig.

Code:
tag="$(date +%d)"
monat="$date +%m)"

if [ $tag -ge 15 ]; then
  monat="$((monat + 1))"
fi

echo $monat

tut es auch.
man test hilft sehr, die eckigen Klammerpaare sind nichts anderes als "test".

Gruß
 
Hallo

Offensichtlich stört sich die Shell an der 0.
Beispiel wie das lösbar ist. ;)
$ date --version
date (coreutils) 5.2.1

$ monat="$(date +%m)"
$ echo $monat
08
$ monat="$((monat +1))"
$ echo $monat
bash: 08: value too great for base (error token is "08")
#Lösung:
$ monat="$((${monat#0}+1))"
$ echo $monat
9
Damit schneiden wir die Vornullen ab, bevor addiert wird.

Gruß Wolfgang
 
Hallo ;)

oder auch man date:

Code:
By  default,  date  pads  numeric fields with zeroes.  GNU
       date recognizes the following modifiers between `%' and  a
       numeric directive.

              `-'  (hyphen) do not pad the field `_' (underscore)
              pad the field with spaces

vergleiche "date +%m" mit "date +%-m"

Gruß
 
@phrenicus
Das ist natürlich richtig, aber bisher wissen wir ja nicht welches date drm verwendet.
Deshalb habe ich eine mögliche Lösung geschrieben.
printf wäre eine weitere portable Lösung.
;)
Gruß Wolfgang
 
Guten Morgen!
Danke für die zahlreiche Unterstützung... :-)
Ich habe mein Problem jetzt so gelöst:

Code:
tag="$(date +%d)"
monat="$(date +%m)"
jahr="$(date +%y)"

if [ tag -gt 15 ]; then
monat=$((monat + 1));
fi

if [ monat -gt 12 ]; then
monat=1;
fi

echo $monat
echo $jahr

Damit es im Dezember kein Problem gibt, habe ich auch noch die Abfrage mit dem Jahr > 12 eingebaut. So funktioniert alles wunderbar!

Darf/Kann man in Unix nicht dieses Zeichen ">" verwenden sondern muss "-gt" nutzen? Wenn ja, wie lautet dann das Zeichen für kleiner?

@Wolfgang: Ich nutze einfach die date-Funktion in der ksh... Wie meinst du das?

EDIT: Uups, mir ist gerade mal aufgefallen, dass der Monat nicht als 09 sondern als 9 ausgegeben wird. Außerdem muss ich in dem Fall, dass Jahr > 12 ist nicht nur den Monat auf 1 setzen sondern das Jahr um 1 erhöhen. Dabei fällt bei dem Jahr 06 auch wieder die null weg, da ich damit gerechnet habe. Gibt es dafür eine elegante Lösung? Die führenden Nullen brauche ich auf jeden Fall...
 
Zuletzt bearbeitet:
Hallo nochmal,

@drm:
Dein Skript wird so kaum laufen. Bei Abfragen einer Variable muss ein $ vorangestellt werden.
Und nur mal so aus Neugier: Was willst Du mit einem Skript anstellen, das ab dem 15. Tag den Monat um 1 erhöht, bis dieser (unlogischerweise) die Zahl 13 erreicht und dann auf 1 zurückgesetzt werden muss, wobei (ab dem 15. Tag des 12. Monats) gleich auch noch das Jahr um 1 erhöht wird?
Das würde mich noch interessieren.

Gruß
 
Hallo phrenicus,
ich möchte den Dateinamen in der Form Jahr + Monat (z. B. 0608) erstellen. Da ich mit date noch nicht ganz klar komme (trotz man date) habe ich dabei noch Probleme. Ist der Tag > 15 soll der Monat um eins erhöht werden (z. B. 0609).

Das Script (siehe oben) läuft bei mir zwar, aber es fehlen die führenden Nullen, die die bei der Berechnung verloren gehen :-(
 
Vielen Dank Xanti, das war der Tipp, nach dem ich gesucht habe. Jetzt funktioniert das Script auch mit der Ausgabe der führenden Nullen :-)
Code:
tag="$(date +%d)"
monat="$(date +%m)"
jahr="$(date +%y)"

if [ tag -gt 15 ]; then
monat=$((monat + 1))
monat=$(printf "%02d" $monat);
fi

if [ monat -gt 12 ]; then
monat=01
jahr=$((jahr + 1))
jahr=$(printf "%02d" $jahr);
fi

echo $monat
echo $jahr
 
Zuletzt bearbeitet:

Ähnliche Themen

Rückgabe eines Befehls

Skript - letzten Samstag im Monat

Queue für copy Script

Shellskript - Fehler in Cron

mittels if abfrage datei nach variabelnwert durchsuchen

Zurück
Oben