geburtstags reminder

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von maik kaurik, 10.06.2015.

  1. #1 maik kaurik, 10.06.2015
    maik kaurik

    maik kaurik Grünschnabel

    Dabei seit:
    10.06.2015
    Beiträge:
    5
    Zustimmungen:
    0
    hi, ich möchte auf meinem raspberry pi nen b day reminder laufen lassen.

    ein cron job soll täglich prüfen ob in datenbank.txt das heutige datum vorkommt. wenn ja email auf mein handy. (zur grundfunktionalität)


    konkret:
    von meinem handy kann ich eine email an den PI senden mit
    Code:
    add
    hans wurst 10.06.1987
    jetzt soll geprüft werden, ob "hans wurst 10.06.1987" schon in datenbank.txt vorhanden ist.
    wenn nicht, soll es reingeschrieben werden.

    leider geht das script nicht so wirklich. es hängt an dem 2. grep.
    hier mal der code
    Code:
    #!/bin/sh
    SUCHE=$(grep -i -v "add" email-add.txt #das add ist das schlagwort für das hinzufügen. alles ausser add wird in variable geschrieben
    if grep -Fxq $SUCHE datenbank.txt
    then
       echo "$SUCHE >> datenbank.txt"
    fi
    
    #email-add.txt ist ne dummy mail zum simulieren.

    hat jemand nen tip für mich?

    grüße
    maik
     
  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. #2 HeadCrash, 11.06.2015
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Moin,

    aus der Manpage zu grep:
    Code:
     -q, --quiet, --silent
                  Unterdrückt die normalen Ausgaben. Die Suche endet sofort  nach  dem  ersten  Treffer  und  gibt  auch  beim
                  Auftreten  von  Fehlern  den  Status  Null  zurück. 
    
    Rückgabewert 0 = True -> also wird die Schleife immer ausgeführt.

    Du suchst brauchst eher nen was nach dem Muster

    Code:
    if [ `grep -[COLOR="#FF0000"]c[/COLOR] $SUCHE` -eq 0]; then
    ...
    
    mfg
    HeadCrash
     
  4. #3 maik kaurik, 11.06.2015
    Zuletzt bearbeitet: 11.06.2015
    maik kaurik

    maik kaurik Grünschnabel

    Dabei seit:
    10.06.2015
    Beiträge:
    5
    Zustimmungen:
    0
    danke für deinen beitrag.
    es lag an den fehlenden " beim 2. grep

    Code:
    #!/bin/sh
    SUCHE=$(grep -i -v "add" email-add.txt #das add ist das schlagwort für das hinzufügen. alles ausser add wird in variable geschrieben
    if grep -Fxq "$SUCHE" "datenbank.txt"
    then
       echo "$SUCHE >> datenbank.txt"
    fi
    als nächstes möchte ich, dass ich mit
    Code:
    remove
    klaus 10.06.1988
    den eintrag aus der datenbank entferne.

    Code:
    #!/bin/sh
    SUCHE=$(grep -i -v "remove" email-remove.txt 
    if grep -Fxq "$SUCHE" "datenbank.txt"
    then
       befehl zum löschen des eintrages in der datenbank.txt
    fi
    ich habe jetzt nen paar varianten mit
    Code:
    greb -v  "$SUCHE" datenbank.txt >> datenbank.txt 
    probiert, das funktioniert aber nicht so wirklich. (inputfile=outputfile error)

    gibt es ne elegante lösung?
     
  5. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    So kann es gehen:
    Code:
    grep -v  "$SUCHE" datenbank.txt > zwischendatei.txt
    mv zwischendatei.txt datenbank.txt
    
     
  6. #5 maik kaurik, 11.06.2015
    maik kaurik

    maik kaurik Grünschnabel

    Dabei seit:
    10.06.2015
    Beiträge:
    5
    Zustimmungen:
    0
    super, das klappt gut.

    nächster step ist die datenbank chronologisch auszugeben

    gegeben:

    datenbank ist so aufgebaut:
    Code:
     dominik 10.02.1988
    franz 22.02.1987
    klaus 11.03.1899
    hanz 10.01.1855
    
    Aufgabe:

    ausgabe sollte mit dem nächsten datum beginnen
    also heutiges datum (11.06.2015) wobei das jahr keine beachtung findet
    beispiel:
    Code:
    hanz 10.01.1855
    dominik 10.02.1988
    franz 22.02.1987
    klaus 11.03.1899
    

    ansatz:
    Code:
    #!/bin/sh
    DATUM=$(date +"%d.%m") #tag, monat wird in now gespeichert
    
    
    DATUM soll nun als referenz dienen. bevor ich mir jetzt den kopf zerbreche wie ich die unterschiedlichen tage in monaten vernünftig zum laufen bekomme, wollte ich erstmal fragen, ob es nicht schon eine funktion für sowas gibt.
     
  7. #6 Gast123, 11.06.2015
    Gast123

    Gast123 Guest

    Vielleicht findest du irgendwo dafür ein Code-Snipplet, ja. Aber warum willst du das Problem unbedingt über Textdateien und Shellskripte lösen?
    Ich würde mir hierfür eine MySQL Datenbank anegen und mir ein kleines ORM schreiben, was ich dann in meinem Programm benutzen kann.
    Ich bin da ein großer fan von Python 3 + peewee.
    Natürlich ginge auch jede andere höhere Programmiersprache. Aber ein Shellskript dafür? Das wäre mir zu aufwändig und fehleranfällig.

    MfG

    Schard
     
  8. #7 HeadCrash, 11.06.2015
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Hmm, MySQL dürfte dafür en bissl übertrieben sein :D
    Würde hierfür in Richtung sqlite schielen.

    Das ganze per Shellskirpt *schauder* *als Aufgabe für die nächsten Azubis notier*
    Am einfachsten das Datum im Format 2014-01-24 in der ersten Spalte speichern, dann bekommt man das via "sort" :)

    mfg
    HeadCrash
     
  9. #8 maik kaurik, 11.06.2015
    maik kaurik

    maik kaurik Grünschnabel

    Dabei seit:
    10.06.2015
    Beiträge:
    5
    Zustimmungen:
    0
    muss ja echt etwas grinsen, als ich deinen beitrag gelsen hab^^
    natürlich ist es ziemlicher blödsinn...

    liegt alles an ner wette...
    ich bin ein mensch der geburtstage nicht wichtig findet. ich selber freue mich, wenn mir keiner gratuliert und ich mag es auch nicht irgendwelche leute anzurufen um denen zu gratulieren.
    zu nem teil liegt es auch dran, dass ich mir keine geburtstage merken kann.

    ich hab es des öfteren probiert mit kalendern, analog und digital.
    analog ist es mir zu nervig, das teil muss man immer rumschleppen falls mal jemand plötzlich geburtstag hat...
    digital war immer das problem, dass ich öfters mal geräte wechsel und die kalender untereinander nicht kompatibel waren. grade bei alten handys.

    einem freund ging mein ständiges geburtstagsvergessen irgendwann so sehr aufn sack, dass er mit mir problemlösestrategien diskutierte xD

    wir kamen auf nen raspberry pi, der immer läuft und die daten per mail sendet. der ist voll kompatibel zu allen endgeräten, die emails empfangen können.
    er gab mir den PI und meinte binnen einer woche muss ich das zum laufen bekommen, dann darf ich den pi behalten und mein nächster geburtstag geht auf ihn :D

    naja ich fange grade, was linux und programieren angeht bei null an. direkt mit sql einsteigen etc. würde evtl. den rahmen von einer woche sprengen.
    ich das muss doch so gehen.!

    nunja gedankenmäßig bin ich jetzt so weit, dass ich mit
    Code:
    1=$(date --date='1day' +"%d.%m" )
    
    mir 366 variablen erstelle
    und mit ner mega if schleife a la:
    Code:
    if grep -Fxq "$DATUM" "datenbank.txt"
            then echo grep "$DATUM" "datenbank.txt"
    else
            if grep -Fxq "$1" "datenbank.txt"
            then echo "$1" >> sortiert.txt
            fi
            if grep -Fxq "$2" .... und so weiter bis die 366 voll sind
    fi
    
    
    warscheinlich DER uneleganteste weg, ist auch bisher nur brainstorming.... für vorschläge bin ich natürlich offen :)

    schönen abend noch
     
  10. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Dann sollte es doch gehen:
    Code:
    HEUTE=$(date +"%d.%m.")
    grep " $HEUTE" datenbank.txt | mail an@mich .... usw.
    
     
  11. #10 Spröde, 13.06.2015
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Code:
    awk '{split($NF,a,".");print a[2]"."a[1],$0}' "Daten.txt" | sort -n | awk -v "t=$(date +%m.%d)" '{if($1>=t){$1="";print substr($0,2)}}'
    "Daten.txt" muss natürlich angepasst werden.
     
  12. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  13. #11 maik kaurik, 14.06.2015
    maik kaurik

    maik kaurik Grünschnabel

    Dabei seit:
    10.06.2015
    Beiträge:
    5
    Zustimmungen:
    0
    könntest du mir das etwas erklären
     
  14. #12 Spröde, 14.06.2015
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Das Prinzip wurde schon in Post #7 gepostet: Man erzeuge ein sortierbares Feld in jede Zeile, hier reicht Monat und Tag. Das tut der 1. awk-Befehl.
    Sort sortiert das Ganze dann und am Schluss räumt awk auf, bzw. entscheidet, was ausgegeben werden soll (der Code gibt keine Geburtstage aus, die dieses Jahr schon vergangen sind).
     
Thema:

geburtstags reminder

Die Seite wird geladen...

geburtstags reminder - Ähnliche Themen

  1. Geburtstagsvideo für Linux von Microsoft

    Geburtstagsvideo für Linux von Microsoft: Microsoft hat sich mit einem Video an dem Wettbewerb der Linux Foundation beteiligt und gratuliert dem freien Betriebssystem zum 20. Jahrestag....
  2. Geburtstags_Erinnerungs-Programm

    Geburtstags_Erinnerungs-Programm: Hallo, ich suche nach ner Software, die mich bei jedem PC-Start an die aktuellen Geburtstage erinnert. Was verwendet ihr bzw. was könnt ihr da...