Nur bestimmtes Format für Eingabe

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Vince95, 06.11.2012.

  1. #1 Vince95, 06.11.2012
    Vince95

    Vince95 Grünschnabel

    Dabei seit:
    06.11.2012
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo zusammen,

    Folgendes Problem:

    Ein User soll ein Datum + Uhrzeit eingeben.
    Das Format muss folgendermassen sein: yyyy-dd-mm-hh-mm-ss

    Einlesen mit:

    Code:
    read -p "Bitte Snapshot eingeben (yyyy-dd-mm-hh-mm-ss) " snapshot
    
    Wenn jetzt etwas anderes eingegeben wird, beispielsweise ein Buchstabe, soll eine Fehlermeldung ausgegeben werden.
    Am besten wäre es, wenn die Zahlen natürlich auch noch eingegrenzt werden. Also Sekunden/Minuten/Stunden von 0 bis 60, Monat von 01 bis 12 und Tag von 0 bis 31.

    Wäre nett, wenn mir jemand einen Tipp geben könnte, wie man sowas macht.

    Gruss
    Vince95
     
  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. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.053
    Zustimmungen:
    8
    Eingabe mit cut aufteilen, einzelne Elemente mit if überprüfen.
     
  4. #3 Gast123, 06.11.2012
    Zuletzt von einem Moderator bearbeitet: 06.11.2012
    Gast123

    Gast123 Guest

    Um nur zweistellige Daten zu erlauben:
    Code:
    if [[ "$DATE" =~ ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])-([0-1][0-9]|2[0-3])-[0-5][0-9]-[0-5][0-9]$ ]]; then
    ...
    Um auch einstellige Daten zu erlauben:
    Code:
    if [[ "$DATE" =~ ^[0-9]{1,4}-([0]{0,1}[1-9]|1[0-2])-([0]{0,1}[1-9]|[1-2][0-9]|3[0-1])-([0]{0,1}[0-9]|1[0-9]|2[0-3])-[0-5]{0,1}[0-9]-[0-5]{0,1}[0-9]$ ]]; then
    ...
    Wobei ich annehme, dass Minuten und Sekunden von 0-59, Stunden von 0-23 und Tage von 1-31 gehen.

    MfG

    Schard
     
  5. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.053
    Zustimmungen:
    8
    oder die Eingabe date als entsprechend formatierten Timestamp vorwerden und schauen, ob die Ausgabe (mit einer entsprechende Formatangabe) der Eingabe entspricht.

    Dann hätte man auch gleich eine Plausibilitätsprüfung drin, die mit einer reinen RegEx nur schwer zu erreichen ist...
     
  6. #5 Spröde, 07.11.2012
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Sehe ich auch so, trotz der schönen RegEx von Schard.

    Also:
    Code:
    #!/bin/bash
    read -p "Bitte Snapshot eingeben (yyyy-dd-mm-hh-mm-ss) " snapshot
    
    IFS='-' d=($snapshot)
    if date -d "${d[0]}-${d[2]}-${d[1]} ${d[3]}:${d[4]}:${d[5]}" 2>&1 >/dev/null
    then
      echo "OK"
    else
      echo "Nicht OK"
    fi
    
     
  7. #6 Vince95, 31.12.2012
    Vince95

    Vince95 Grünschnabel

    Dabei seit:
    06.11.2012
    Beiträge:
    5
    Zustimmungen:
    0
    Ach das Thema hier hab ich jetzt ganz vergessen.
    Tut mir Leid :D

    @Spröde:
    Kannst du mir noch erklären, was in der Zeile genau passiert?

    PS: Das Format hat sich in der Zwischenzeit ein wenig geändert^^
    Neu sollte es folgendermassen sein: yyyy-mm-dd-hh:mm:ss

    Gruss
    Vince
     
  8. #7 Spröde, 31.12.2012
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Es passiert das, was Marce vorgeschlagen hat: Die Eingabe wird in ein Array eingelesen und - entsprechend aufbereitet - an das Tool "date" weiter gegeben, dessen Exit-Code ausgewertet wird.

    IFS='-' bestimmt den/die Feldtrenner für das Array (hier nur das Minuszeichen)

    2>&1 >/dev/null leitet alle Ausgaben von date über die Wupper.
     
  9. #8 Vince95, 03.01.2013
    Vince95

    Vince95 Grünschnabel

    Dabei seit:
    06.11.2012
    Beiträge:
    5
    Zustimmungen:
    0
    Und wenn ich jetzt 2 Feldtrenner habe?

    Das neue Format beinhaltet noch Doppelpunkte..

    Gruss
    Vince
     
  10. Anzeige

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

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.053
    Zustimmungen:
    8
    dann wird's halt aufwändiger.
     
  12. #10 Spröde, 03.01.2013
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    :rofl:
     
Thema:

Nur bestimmtes Format für Eingabe

Die Seite wird geladen...

Nur bestimmtes Format für Eingabe - Ähnliche Themen

  1. Tastaursignale für ein bestimmtes Programm ändern

    Tastaursignale für ein bestimmtes Programm ändern: Abend, ist es unter Ubuntu möglich die Tastenbefehle die bei einem bestimmten Programm ankommen nur für dieses Programm zu ändern? Wenn also...
  2. Sed: Bestimmtes Feld einer "Zeile mit mehreren Feldern" ergänzen

    Sed: Bestimmtes Feld einer "Zeile mit mehreren Feldern" ergänzen: Hallo, in einer Datenbank (einfache Textdatei) wollte ich in einer bestimmten Zeile ein bestimmtes Feld mit Informationen ergänzen. Geläufig...
  3. Textfile auf jeder Zeile bestimmtest Wort heraussuchen

    Textfile auf jeder Zeile bestimmtest Wort heraussuchen: Guten Tag miteinander, ich hätte kurz eine Frage, und zwar habe ich ein Logfile vormir, welches immer gleich aufgebaut ist, Beispiel: Mon...
  4. bestimmtes gdesklet

    bestimmtes gdesklet: Hallo, ich habe mir soeben die schönen screenshots von euch in der Gallery angeschaut. Da habe ich diesen screenshot gefunden (gallery). Dieses...
  5. FTP-User für bestimmtes Verzeichnis

    FTP-User für bestimmtes Verzeichnis: Hallo, wie kann ich einen FTP-User für ein beliebiges Verzeichnis am Server erzeugen (zB /home/user/ordner/ftpOrdner). Ich benutze vsftp und...