OT: Shell Skript Programmierung: Abfrage ob Variable leer

  • Hallo,


    ich habe ein Problem bei der Shell Programmierung (sh). Hier der Code:


    output=""
    output=`find ./ -name 'ab*' `


    if [ -z $output ]
    then
    echo "Nix gefunden"
    elif
    echo "Was gefunden"
    fi


    Nun klappt das leider nicht. Wenn output leer ist, wenn es also keine Datei ab* gibt, dann gibt's bei der if-abfrage einen Fehler, dass ein Parameter fehlt.


    Wie würde ich korrekt vorgehen?


    Gruß&Danke
    Hendrik

  • In der shell kenn ich mich nicht so gut aus, aber in z.B. c würde man nicht benützte variablen mit NULL initialiesieren.
    Weiß jetzt nicht obs in der Shell so einfach funktioniert ansonsten einfach auf irgend einen Ausdruck oder sonst was überprüfen.


    mfg Thomas

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Hi,
    Ich mach sowas immer so:

    Code
    if [ "$(find ./ -name "ab*")" = "" ] ; then
       echo "Nix gefunden"
    else
       echo "Was gefunden"
    fi


    und wenn Du mit dem Ergebnis was machen willst:

    Code
    find ./ -name "ab*" | while read i ; do
       #irgendwas mit i machen
       echo "$i found"
    done
  • Hallo,


    das geht so einfach nicht.
    Die erste output= Zeile macht ja im Grunde genau das. Da könnte auch =NULL oder =empty stehen. Aber die Zweite Zeile überschreibt den Inhalt in jedem Fall.


    Mit [ -z String] prüft man, ob der String leer ist. Das sollte also klappen. Doch wenn find nichts findet, dann ist der String scheinbar nicht leer, sondern scheibar gibt es die Variable gar nicht mehr.


    Gruß,
    Hendrik

  • Zitat

    Original von henfri
    Mit [ -z String] prüft man, ob der String leer ist.


    Achtung! Falle!
    Beachte bitte, das die beiden "eckigen Klammern" jeweils frei stehen, also beiderseits von einem Leerzeichen eingerahmt sind und kein anderes Zeichen direkt daran anschliesst. Sonst klappt das nicht mit der Erkennung, dass Du "test" nutzen willst.

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • Zitat

    Original von henfri
    Mit [ -z String] prüft man, ob der String leer ist. Das sollte also klappen. Doch wenn find nichts findet, dann ist der String scheinbar nicht leer, sondern scheibar gibt es die Variable gar nicht mehr.


    So siehts aus :)


    Die bash ersetzt deine Variable durch den zugewiesenen Wert .
    Ist kein Wert zugewiesen steht da nix und natürlich kriegste dann Mecker weil n Parameter fehlt .


    Auf der sicheren Seite biste immer mit dem Leerstring .


    HJS

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!