Datum: Monat erhöhen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von drm, 29.08.2006.

  1. drm

    drm Eroberer

    Dabei seit:
    29.08.2006
    Beiträge:
    59
    Zustimmungen:
    0
    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!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    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".
     
  4. #3 phrenicus, 29.08.2006
    phrenicus

    phrenicus Routinier

    Dabei seit:
    24.05.2006
    Beiträge:
    253
    Zustimmungen:
    0
    Ort:
    Tübingen, Germany
    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ß
     
  5. #4 Wolfgang, 29.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Offensichtlich stört sich die Shell an der 0.
    Beispiel wie das lösbar ist. ;)
    Damit schneiden wir die Vornullen ab, bevor addiert wird.

    Gruß Wolfgang
     
  6. #5 phrenicus, 29.08.2006
    phrenicus

    phrenicus Routinier

    Dabei seit:
    24.05.2006
    Beiträge:
    253
    Zustimmungen:
    0
    Ort:
    Tübingen, Germany
    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ß
     
  7. #6 Wolfgang, 29.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    @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
     
  8. #7 drm, 30.08.2006
    Zuletzt bearbeitet: 30.08.2006
    drm

    drm Eroberer

    Dabei seit:
    29.08.2006
    Beiträge:
    59
    Zustimmungen:
    0
    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...
     
  9. #8 phrenicus, 30.08.2006
    phrenicus

    phrenicus Routinier

    Dabei seit:
    24.05.2006
    Beiträge:
    253
    Zustimmungen:
    0
    Ort:
    Tübingen, Germany
    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ß
     
  10. drm

    drm Eroberer

    Dabei seit:
    29.08.2006
    Beiträge:
    59
    Zustimmungen:
    0
    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 :-(
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Code:
    year=$(printf "%02d" $year)
    
     
  13. #11 drm, 30.08.2006
    Zuletzt bearbeitet: 30.08.2006
    drm

    drm Eroberer

    Dabei seit:
    29.08.2006
    Beiträge:
    59
    Zustimmungen:
    0
    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
    
     
Thema:

Datum: Monat erhöhen

Die Seite wird geladen...

Datum: Monat erhöhen - Ähnliche Themen

  1. Datumsproblem!! Letzter Tag vom Monat ist 0 ??

    Datumsproblem!! Letzter Tag vom Monat ist 0 ??: Hallo zusammen, habe ein Shellscript laufen welches immer eine Abfrage vom Vortag startet Der Vortag wird mit berechnet und zwar so:...
  2. Shell-Skript Datum in einer Datai suchen

    Shell-Skript Datum in einer Datai suchen: Hallo zusammen Ich komm eigentlich aus der Klicki-Bunti-Welt von Windows. Seit geraumer Zeit versuche ich meine Künste mit verschiedenen...
  3. Wie kann ich im AIX x Tage vom Datum subtrahieren ?

    Wie kann ich im AIX x Tage vom Datum subtrahieren ?: Für ein Skript unter AIX brauche ich einen Code, der mir vom aktuellen Datum 7 Tage abzieht und das Datum im gewünschten Format ausgibt. Hat...
  4. Wie filtere ich nach Datum um Files zu löschen

    Wie filtere ich nach Datum um Files zu löschen: Ich möchte alle *.sql Dateien löschen die älter als 20 Tage sind. Die Verbindung mache ich von einem RedHat auf eine Windows 2008 Server....
  5. Dateien nach Datum finden

    Dateien nach Datum finden: Hallo zusammen, ich würde gerne Wissen wie ich am einfachsten Dateien nach einem bestimmten Datum in einem Verzeichnis suchen kann. Das...