fehlerhafte usereingabe mit case abfangen?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von tuxlover, 22.02.2007.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. #1 tuxlover, 22.02.2007
    Zuletzt bearbeitet: 22.02.2007
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    hallo ich möchte folgendes machen:

    der user meines shellscripts soll als parameter einen dateipfad an das script übergeben. dabei soll beachtet werden, dass dateipfade mit / anfangen und keine sonderzeichen enthelten. ich habe mir nun folgende case anweisung überlegt, weiß aber nicht, wie ich einen NOT operator einbaue.

    Code:
    #!/bin/bash
    
    VAR="notvalid"
    read -p "enter path:"
    $(VAR:="notvalid") 2> /dev/null
    CHECKER=`echo $VAR | cut  -c -1 ` 
    
    #sollte bei gültigen eingaben / am anfang haben^^
    
    case "$CHECKER" in
    notvalid) echo "not a valid pathname script stopped" && exit 1 
    ##fängt die leere eingabe ab^^ 
    esac 
    
    sonst noch jemand ne idee

    vielen dank

    gruß tuxlover
     
  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 Wolfgang, 22.02.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Da du offensichtlich die Bash nutzt, zunächst folgendes zu deinem Scriptversuch.
    as dürfte zumindest so nicht durchlaufen:
    Siehe die fett markierten Stellen.
    Wenn du die Variablenexpansion nutzen willst, schau dir das nochmal an in der Manpage von bash:
    $(command) führt ein Commando aus, was $(VAR:="notvalid") definitiv nicht ist.
    Meintest du eventuell ${VAR:=fuubar}? Man achte auf die verwendete Klammerart!
    Die Backtiks sind eigentlich auch deprecated besser $(command);

    Interessant wäre für dich wahrscheinlich auch ${parameter:offset:length}.
    Weiterhin endet bei case jedes Command mit doppeltem ;; (Semikolon)

    Ein Tipp zum Schluss:
    Warum willst du das mit case erschlagen, zumal du wahrscheinlich auch noch die Existenz des Pfades und ob er lesbar istusw.prüfen musst.

    Hier eignet sich Test (aka if) wirklich besser.

    Case ist nur geeignet, auf pattern zu testen.
    Code:
    case $VAR in
    [!A]*) echo "Beginnt nicht mit A";;
    ...
    
    So nun viel Spaß beim Einlesen in die genannten Dinge.

    Gruß Wolfgang
     
  4. #3 tuxlover, 22.02.2007
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    ja hast recht bei mir ist es auch i n {} geklammert. habe jetzt nur keine möglichkeit dass nachzuschauen.


    was ist denn an der zeile falsch?

    CHECKER:=`echo $VAR | cut -c -1 `

    naja ich kann mich nicht mehr richtitg erinnern, wie ich das gemacht habe. aber meine idee war die, dass wenn alles bis auf den ersten char abgeschnitten wird und wenn dann in case eingelesn kein / ist, dass programm abbricht.

    aber das ist nicht so schön, weil es ja noch keine * oder andere sonderzeichen von der ausgabe ausschließt.

    vlt hat jemand eine bessere idee
     
  5. #4 Wolfgang, 22.02.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Hast du das mal getestet?
    Mit Sicherheit nicht!
    DU solltest dir mal ansehen, wie eine Wertzuweisung unter bash funktioniert.
    Das ist allenfalls pascal, aber keine Bashsyntax. ;)

    Gruß Wolfgang
     
  6. #5 tuxlover, 22.02.2007
    Zuletzt bearbeitet: 22.02.2007
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    doch mit sicherheit habe ich das getestet und außerdem steht das kommando in ``, falls du dieses detail übersehen haben solltest.

    wie schon gesagt, es kann sein, dass es nicht ganz stimmt. aber das war auch nicht meine frage. meine frage zum code bezog sich auf den case. alles andere funktioniert bei mir. :)

    bei der wertzuweiseung kann ich mir nicht alles merken. weshalb ich es zuhause auf ein zettel geschrieben habe. schön ordentlcih mit selbst durchprobierten beispielen. hehe ;)

    kann mir z.b. das ganze mit einer schleife abfangen???
     
  7. #6 Wolfgang, 22.02.2007
    Zuletzt bearbeitet: 22.02.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo Nochmal $() ist die neue Version und sollte heute immer statt ´ ´ verwendet werden. (falls dir mein erster Beitrag nicht aufgefallen ist)
    ;)
    Hat mit dem Fehler auch nix zu tun!
    Eine Zuweisung unter bash :
    VARNAME=WERT
    Da steht kein Doppelpunkt.
    In welcher Bash hast du das getestet?

    Zur case habe ich dir schon geantwortet.
    Aber möglicherweise magst du meinen Beitrag garnicht lesen.
    Es hat zumindest für mich den Anschein.

    Dann kann ich mir das auch sparen.

    Wolfgang
    Nachtrag
    Code:
    VAR="*ABCD";
    case  "$VAR" in [!A]*) echo "nicht A";;
    esac
    nicht A
    
    Funktioniert problemlos auch mit *.
     
  8. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Ich empfehle die Lektüre von man bash und man grep.
     
  9. #8 tuxlover, 22.02.2007
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    ja der doppelpunkt ist ein tippfehler. sry. habs berichtigt.

    so nun bin ich aber völlig verwirrt. warum nun mit
    VARNAME=$() und nicht VARNAME=`` wo ist denn der unterschied.

    @xanti wieso grep? man bash: nö denke ich gar nicht dran. viel zu durcheinander was da steht. zum lernen nicht geeignet. ich lese das abs von der linux howto website und das von der schatenseite und ein paar andere.
     
  10. #9 Wolfgang, 22.02.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    $() ersetzt `` wegen der vermeidbaren Verwechslung.
    Dass das nix mit dem Fehler zu tun hat sagte ich schon.

    Wenn du die Manpage für überflüssig hältst, warum sollte dir dann jemand sein Wissen weitergeben wollen, der sich die Mühe gemacht hat.

    Hast du dir das mal überlegt?

    Kopfschüttelnd abtretend
    Wolfgang
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. #10 tuxlover, 22.02.2007
    tuxlover

    tuxlover Der den Tux knuddelt

    Dabei seit:
    26.10.2005
    Beiträge:
    2.106
    Zustimmungen:
    0
    Ort:
    berlin
    ich halte die manpage im allgemeinen nicht für überflüssig. ich habe damit schon oft dinge nach geschaut.
    okay verstehe jetzt den hinweis auf grep. damit kann ich ja dann nach stichpunkten forschen. alles klar.
    ich wollte nur vermeiden, dass mir jemand vorwirft ich sei zu faul die etwas zu lesen.
     
  13. #11 Xanti, 22.02.2007
    Zuletzt bearbeitet: 22.02.2007
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Mit grep und speziell dessen Möglichkeit, reguläre Ausdrücke verarbeiten zu können, lässt sich relativ leicht der Pfad auf Gültigkeit prüfen lassen.

    Deine Aversion gegen Man-Pages ist Dein Problem. Diese Man-Pages sind auch nicht zum Lernen gedacht, sondern zum Nachschlagen. Da Du Dein Wissen lieber aus veralteten Howtos beziehst, hättest Du zumindest Wolfgangs Hinweise nachschlagen können. Dies hätte Dir einige peinliche Kommentare ersparen können.

    Alles, was ich erkenne, ist Lernresistenz -> Closed.
     
Thema:

fehlerhafte usereingabe mit case abfangen?

Die Seite wird geladen...

fehlerhafte usereingabe mit case abfangen? - Ähnliche Themen

  1. Linux.Encoder: Das Laster der fehlerhaften Kryptografie

    Linux.Encoder: Das Laster der fehlerhaften Kryptografie: Der mittlerweile in der dritten Generation nun vorliegende Ransomware »Linux.Encoder« kann immer noch kaum Schrecken unter Linux verbreiten -...
  2. Fehlerhafte Installation von OpenSUSE 13.1

    Fehlerhafte Installation von OpenSUSE 13.1: Hallo zusammen, seit dem Wochenende habe ich mit einem kuriosen Problem zu kämpfen, das mich vor ziemliche Rätsel stellt. Am Wochenende...
  3. vfs full_audit loggt keine fehlerhaften Anmeldungen

    vfs full_audit loggt keine fehlerhaften Anmeldungen: Hallo zusammen, ich habe einen Samba-Server auf OpenSuse 12.3 laufen, würde nun noch gerne einen fail2ban-Mechanismus einrichten. Dazu schreibe...
  4. Fehlerhafte anmeldung an WinXP Client

    Fehlerhafte anmeldung an WinXP Client: Hallo Leute, ich arbeite grade an meiner Abschlussarbeit meiner Ausbildung und möchte dafür einen Primären Domain Controller via Samba auf einem...
  5. Fehlerhafter WLAN Treiber verhindert Booten

    Fehlerhafter WLAN Treiber verhindert Booten: Hallo, ich habe einen falschen oder beschaedigten WLAN Treiber auf meinem Laptop (mit Ubuntu Linux) installiert. Der Bootvorgang sieht nun wie...
Status des Themas:
Es sind keine weiteren Antworten möglich.