Variablen und Ersetzungsproblem in Bash

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von laptop24, 15.01.2008.

  1. #1 laptop24, 15.01.2008
    laptop24

    laptop24 Grünschnabel

    Dabei seit:
    15.01.2008
    Beiträge:
    2
    Zustimmungen:
    0
    Moin,

    ich hab da ein Problem, an dem ich seit Tagen sitze und keine Lösung finde. Vielleicht kann einer von euch da helfen.

    Angenommen ich habe in einem Bash-Script dieses Kommando:

    Code:
    dialog --menu "Titel" 16 40 6 TAG1 "Punkt 1" TAG2 "Punkt 2"
    Damit wird mir ein Menü angezeigt, dass aus zwei Zeilen besteht:

    Code:
    TAG1   Punkt 1
    TAG2   Punkt 2
    Nun möchte ich mein Menü dynamisch zur Script-Laufzeit aufbauen. Zu deutsch: wenn z.B. ein Verzeichnis existiert, dann soll im Menü der Punkt "F Verzeichnis füllen" auftauchen. Wenn weiterhin ein anderes Verzeichnis existiert, dann soll ein Menüpunkt "C Compilieren" im Menü erscheinen.

    Das wollte ich so lösen, dass ich bei den entsprechenden Checks eine Variable mit dem Inhalt des Menüpunktes fülle.

    Mit anderen Worten, ich möchte sowas machen (sinngemäß):

    Code:
    ITEM1=F "Verzeichnis füllen"
    ITEM2=C "Quellen compilieren"
    
    dialog --menu "Titel" 16 40 6 ${ITEM1} ${ITEM2}
    Wo ist nun das Problem?

    Als erstes kann man ITEM1 so nicht zuweisen.
    Zweitens: was ich auch probiere, ich bekomme die zwei Parameter eines Menüpunktes nicht in einer Variable an dialog übergeben.

    Wie kann ich das Problem lösen?
     
  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, 15.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Entweder du nutzt ein Array, wobei Index 0 der Tag und Index1 item ist, oder du speicherst es in zwei Variablen.
    Beides geht.
    Code:
    T1=F;
    I1="Verzeichnis füllen";
    T2="C";
    I2="Quellen compilieren";
    
    dialog --menu "Titel" 16 40 6 "$T1" "$I1" "$T2" "$I2";
    # Array inititialisieren (leer) und Index auf 0;
    A="()";
    IN=0;
    if ....
    A[$IN]="F";
    ((IN++));
    A[$IN]="Verzeichnis füllen";
    ((IN++));
    fi
    if ...
    A[$IN]="C";
    ((IN++));
    A[$IN]="Quellen compilieren";
    ((IN++));
    fi
    # weitere Tests, weitere Einträge wie gehabt
    
    dialog --menu "Titel" 16 40 6 "${A[@]}";
    
    Wenn es sehr viele Einträge werden, musst du natürlich die Höhe anpassen.
    Die Anzahl der Zeilen bekommst du mit Arrayeinträge / 2 raus.
    Code:
    Z=$((${#A[@]}/2))
    
    Gruß Wolfgang
     
  4. #3 laptop24, 16.01.2008
    laptop24

    laptop24 Grünschnabel

    Dabei seit:
    15.01.2008
    Beiträge:
    2
    Zustimmungen:
    0
    Problem gelöst

    Ich danke Dir Wolfgang. Das Problem ist mit dem Array gelöst.

    Die erste Lösung funktioniert nicht. Denn wenn ich den Menüpunkt 1 z.B. ausblenden möchte, dann würde ich T1 und I1 gleich "" setzen oder löschen. Dann ergibt sich als Menüparameter:

    Code:
    dialog --menu "Titel" 16 40 6 "" "" "C" "Quellen compilieren"
    Damit bekomme ich im angezeigten Menü eine nicht auswählbare leere Zeile, was ja nicht gewünscht ist.

    Mit dem Array dagegen funktioniert es genau so, wie ich das will. Merkwürdigerweise habe ich das schon mit Arrays versucht und nicht hinbekommen. Jetzt muss ich mal analysieren, was ich anders gemacht habe.

    Aber auf jeden Fall kannst Du Dir meines Dankes sicher sein.
     
  5. #4 Wolfgang, 16.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Die erste Lösung würde auch funktionieren, wenn du vorher testest ob T1 und L1 leer ist, bevor du den zweiten Menüeintrag füllst. ;)
     
  6. Anzeige

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

Variablen und Ersetzungsproblem in Bash

Die Seite wird geladen...

Variablen und Ersetzungsproblem in Bash - Ähnliche Themen

  1. Linux 4.5 will UEFI-Variablen besser schützen

    Linux 4.5 will UEFI-Variablen besser schützen: Das Löschen bestimmter UEFI-Variablen kann manche Rechner nicht mehr startbar machen. Das kommende Linux 4.5 ergreift Maßnahmen dagegen, die im...
  2. Textdatei zeilenweise in durchnummerierte Variablen schreiben

    Textdatei zeilenweise in durchnummerierte Variablen schreiben: Hi Leute, ich versuche folgendes Problem zu lösen. Ich möchte eine Textdatei einlesen und den Inhalt jeder Zeile in immer eine neue Variable...
  3. mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern

    mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern: Hallo zusammen, es geht um folgenden Teil meiner .sh-Datei: NumberCheck=`mysql $SQL_ARGS "SELECT lkw, Firma FROM adb_group WHERE...
  4. Teil einer Variablen auslesen und in neue Variable schreiben

    Teil einer Variablen auslesen und in neue Variable schreiben: Hallo, ist für Euch bestimmt ganz einfach, aber trotz googlen komme ich nicht auf eine Lösung. In Variable x habe ich stehen: xy,ab Nun möchte...
  5. Inhalt einer Variablen aus Batch an Shellscript übergeben

    Inhalt einer Variablen aus Batch an Shellscript übergeben: Hallo, ich komme einfach nicht drauf. Wie kann ich den Wert aus einer Variablen eines Batches an mein Shellscript übergeben? So? #...