Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 29

Thema: Variablen durch Schleifen befüllen

  1. #1
    Reichtum, Macht und Ruhm!
    Registriert seit
    Sep 2014
    Beiträge
    160

    [Gelöst] Variablen durch Schleifen befüllen

    Hallo Liebe Community,

    ich habe folgendes Problem.

    Ich habe per kdialog mehrere Skripte angefertigt, die mir dann gewisse Daten ausgeben (in meinem Fall Rechnungsnummern)
    Ist es irgendwie möglich, das ich z.B. die Ausgabe von meinen Treffern in Variablen Speicher, um diese in einer radiolist per kdialog aufzurufen?

    Bisher habe ich das sehr umständlich gelöst und die Trefferausgabe in eine Datei umgeleitet und per sed jede Zeile einzeln in die radiolist eingefügt.

    Das hat zur Folge das ich eben nie weiß ob ich alle Treffer in der Liste habe. Bisher lese ich immer 30 Zeilen aus, wenn ich aber 31 Treffer haben sollte fehlt mir ja eine. Außerdem wird der Code so extrem lang - was ich eigentlich vermeiden möchte.....

    Kann man über eine Schleife eine liste befüllen?

    Bin auch offen, falls es was besseres als kdialog gibt, ich weiß schon das es yad usw gibt.... aber ich hab mich mit kdialog irgendwie angefreundet =)

    Für Tipps bin ich immer offen!

    Grüße,

    iBlack
    Geändert von iBlack (13.10.16 um 15:27 Uhr)
    Superquadratisch, Galaktisch gut!

  2. #2
    Reichtum, Macht und Ruhm!
    Registriert seit
    Sep 2014
    Beiträge
    160
    Also,

    ich bin jetzt so weit gekommen, das die Ausgabe (teilweise) in die Radioliste geschrieben wird!

    Hier mal mein Code....:

    Code:
    #!/bin/bash
    
    input=$(kdialog --inputbox "Geben Sie die Kundennummer des Kunden ein, dessen Rechnungen Sie suchen wollen!")
    
    whoami=$(whoami)
    
    cd /etc
    	pfad=$(grep $whoami fstab | cut -d/ -f6-8 | sed -n 1p) #Auslesen der gemounteten Laufwerkpfade
    		echo $pfad #Ausgabe des Pfades
    
    cd /$pfad/WWW-INTRA/rechnungs-pool/ #Wechseln des Verzeichnisses in das Gemountete Verzeichnis
    
    			suche1=$(find ./ -name "$input*" | sort) #Suche der angegebenen Kundennummer im Rechnungspool
    				kdialog --msgbox "$suche1"
    
    			rechnungslaeufe=$(kdialog --yesno "Wollen Sie sich die Rechnungsläufe anzeigen lassen?")
    
    			if [ "$?" = "0" ]
    			  then
    			    suche=$(find ./ -name "$input*" | sort | cut -d/ -f2 | sort -u) #Suche der angegebenen Kundennummer im Rechnungspool
    			  else
    			    exit
    			fi
    
         kdialog --radiolist "Ausgabe" $suche
    Wenn ich diesen Teil:
    Code:
    kdialog --radiolist "Ausgabe" $suche
    Durch diesen ersetze:
    Code:
    kdialog --msgbox "$suche"
    Bekomme ich eine msgbox mit 19 Nummern
    Wenn ich aber das 1. habe bekomme ich nur 6 Nummern ausgegeben.

    Die Normale Syntax der Radiolist ist ja
    Code:
    kdialog --radiolist "Bezeichnung des Fensters" 1[Nummer des Listeneintrages] "Blablabla" [Bezeichnung des Listeneintrages] off [Item Status]
    Deswegen Frag ich mich warum das überhaupt ohne den ganzen Kram ((teilweise) funktioniert....

    Ich weiß jedoch keine Lösung warum mir das nur teilweise angezeigt wird....

    Kann jemand helfen?


    Grüße,

    iBlack
    Superquadratisch, Galaktisch gut!

  3. #3
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.062
    Du hast in der Variable 19 Elemente. Wenn ich die Doku richtig verstehe verlangt Kdialog für jeden Eintrag 3 Optionen. 19 durch 3 gibt 6 vollständige Einträge.
    Ich bin root - ich darf das.

  4. #4
    Reichtum, Macht und Ruhm!
    Registriert seit
    Sep 2014
    Beiträge
    160

    Thumbs up

    @marce ...
    ich bin ja auch echt Blöd!

    Soweit so gut! Vielen Dank schon mal!

    Ich hab aus nem anderen Beitrag noch was mit genutzt...
    Jedoch bin ich mir nicht sicher ob das so leicht funktioniert...
    Code:
    			readargs(){ 
        while read num item ; do
            printf "%s %s false" "$num" "$item";
        done < "$suche" ;
    }
    
    kdialog --radiolist "Test" $( readargs )
    Aber irgendwie wird die radiolist nicht mehr aufgerufen.

    Ich denke ich habe irgendwo ein Fehler mit den Platzhaltern?

    Mensch :x

    Das ist doch alles viel zu kompliziert für mich


    Grüße und Danke schon mal!

    iBlack
    Superquadratisch, Galaktisch gut!

  5. #5
    Banned
    Registriert seit
    Feb 2005
    Beiträge
    1.151
    Ich denke, das ist ein typisches Quotingproblem. Learn to quote.
    Und der Status der Radiolist ist der DRITTE Parameter des Eintrags.
    Code:
    printf "\"%s\" \"%s\" false "    "$num"  "$item"
    Durch die maskieren Anführungszeichen innerhalb des Formatdescriptors von printf erhält kdialog dann letztlich wirklich 3-Tupel von Strings.
    Beachte auch das Leerzeichen nach "false". Es ist zwingend nötig.
    Geändert von BetterWorld (06.10.16 um 16:56 Uhr)

  6. #6
    Reichtum, Macht und Ruhm!
    Registriert seit
    Sep 2014
    Beiträge
    160
    Guten Morgen zusammen,

    gut, dann hab ich da schon mal einen Fehler gemacht, okay!

    Jedoch, wird die Ausgabe zwar auf der Konsole getätigt, jedoch wird die Ausgabe nicht in die radiolist übertragen....
    Ich bekomme zwar die korrekte List auf die Konsole, aber die Radiolist wird nich gestartet bzw. aufgerufen.

    Die Korrekte Ausgabe wäre:
    0200
    0201
    0202
    0203
    0204
    0205
    0206
    0207
    0208
    0209
    0210
    0211
    0212
    0213
    0214
    0215
    0216
    0217
    0218
    Auf der Konsole kommt folgendes:
    Zeile 21: 0200
    0201
    0202
    0203
    0204
    0205
    0206
    0207
    0208
    0209
    0210
    0211
    0212
    0213
    0214
    0215
    0216
    0217
    0218: Datei oder Verzeichnis nicht gefunden
    Sicher hab ich wieder irgendwo einen Fehler, nur hab ich ehrlich gesagt keine Ahnung wo!

    Die readargs Funktion sieht mittlerweile so aus:
    Code:
    readargs(){ 
        while read num item  ; do
            printf "\"%s\" \"%s\" false "    "$num"  "$item"
        done < "$suche" ;
    }
    
    kdialog --radiolist "Test" $( readargs )

    Grüße,

    iBlack
    Superquadratisch, Galaktisch gut!

  7. #7
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.819
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  8. #8
    Reichtum, Macht und Ruhm!
    Registriert seit
    Sep 2014
    Beiträge
    160
    Hallo nopes,

    mit -x bringt das das gleiche wie oben beschrieben. Ohne Änderung!

    Edit:
    Laut Debugging scheint die Funktion readargs nicht von der Radiolist mit aufgenommen zu werden.

    Code:
    ++ kdialog --yesno 'Wollen Sie sich die Rechnungsläufe anzeigen lassen?'
    + rechnungslaeufe=
    + '[' 0 = 0 ']'
    ++ cut -d/ -f2
    ++ sort
    ++ sort -u
    ++ find ./ -name '12224*'
    + suche='0200
    0201
    0202
    0203
    0204
    0205
    0206
    0207
    0208
    0209
    0210
    0211
    0212
    0213
    0214
    0215
    0216
    0217
    0218'
    ++ readargs
    /home/phk/bin/1.Bash_Shell/Rechnungssuche: Zeile 21: 0200
    0201
    0202
    0203
    0204
    0205
    0206
    0207
    0208
    0209
    0210
    0211
    0212
    0213
    0214
    0215
    0216
    0217
    0218: Datei oder Verzeichnis nicht gefunden
    + kdialog --radiolist Test

    Grüße,

    iBlack
    Geändert von iBlack (07.10.16 um 10:28 Uhr)
    Superquadratisch, Galaktisch gut!

  9. #9
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.819
    Nö ist so nicht ganz richtig, die letzte Zeile zeigt dir an, wie kdialog gestartet wird, also irgendwie gibt deine Funktion (readargs) nichts zurück, da musst du ansetzen - http://tldp.org/LDP/abs/html/complexfunct.html
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  10. #10
    Reichtum, Macht und Ruhm!
    Registriert seit
    Sep 2014
    Beiträge
    160
    Ich blick auf der Seite nich durch, zumal ich keine Ahnung hab, warum die Funktion nichts ausgibt, an sich gibt sie ja was auf der Konsole aus, aber ich hab keinen blassen Schimmer, warum die Funktion nicht innerhalb des Dialoges aufgerufen werden kann!
    Superquadratisch, Galaktisch gut!

  11. #11
    Banned
    Registriert seit
    Feb 2005
    Beiträge
    1.151
    Füge davor ein set -vx ein, und poste dann.

  12. #12
    Reichtum, Macht und Ruhm!
    Registriert seit
    Sep 2014
    Beiträge
    160
    Sorry wenn ich das so doof frag, aber wo genau soll ich das einsetzen?
    Superquadratisch, Galaktisch gut!

  13. #13
    Banned
    Registriert seit
    Feb 2005
    Beiträge
    1.151
    Da es schlicht jede gelesene Zeile anzeigt UND dann anzeigt, was die Bash beim Parsen damit gemacht hat, und man damit dann die Zeilen lesen kann, die tatsächlich ausgeführt werden, macht es Sinn diese Zeile einzufügen vor den Zeilen, die man sehen möchte.
    Bei dir also nach dem Shebang.

    Wieso probierst du sowas nicht einfach aus?

  14. #14
    Reichtum, Macht und Ruhm!
    Registriert seit
    Sep 2014
    Beiträge
    160
    @Betterworld,

    Danke für die Erklärung!

    Hier die Ausgabe der Konsole:
    Code:
    ++ kdialog --inputbox 'Geben Sie die Kundennummer des Kunden ein, dessen Rechnungen Sie suchen wollen!'
    + input=12224
    whoami=$(whoami)
    whoami
    ++ whoami
    + whoami=phk
    
    cd /etc
    + cd /etc
            pfad=$(grep $whoami fstab | cut -d/ -f6-8 | sed -n 1p) #Auslesen der gemounteten Laufwerkpfade
    grep $whoami fstab | cut -d/ -f6-8 | sed -n 1p
    ++ sed -n 1p
    ++ cut -d/ -f6-8
    ++ grep user fstab
    + pfad=home/user/pfad
                    echo $pfad #Ausgabe des Pfades
    + echo home/user/pfad
    home/user/pfad
    cd /$pfad/zu/rechnungen/ #Wechseln des Verzeichnisses in das gemountete Verzeichnis
    + cd /home/user/Pfad/zu/rechnungen/
                            suche1=$(find ./ -name "$input*" | sort) #Suche der angegebenen Kundennummer im Rechnungspool
    find ./ -name "$input*" | sort
    ++ sort
    ++ find ./ -name '12224*'
    + suche1='./0200/rechnungen/12224_1028490.pdf
    ./0200/rechnungen/12224_1028490.pdf.sig
    ./0201/rechnungen/12224_1028782.pdf
    ./0201/rechnungen/12224_1028782.pdf.sig
    ./0202/rechnungen/12224_1029076.pdf
    ./0202/rechnungen/12224_1029076.pdf.sig
    ./0203/rechnungen/12224_1029365.pdf
    ./0203/rechnungen/12224_1029365.pdf.sig
    ./0204/rechnungen/12224_1029658.pdf
    ./0204/rechnungen/12224_1029658.pdf.sig
    ./0205/rechnungen/12224_1029949.pdf
    ./0205/rechnungen/12224_1029949.pdf.sig
    ./0206/rechnungen/12224_1030232.pdf
    ./0206/rechnungen/12224_1030232.pdf.sig
    ./0207/rechnungen/12224_1030519.pdf
    ./0207/rechnungen/12224_1030519.pdf.sig
    ./0208/rechnungen/12224_1030802.pdf
    ./0208/rechnungen/12224_1030802.pdf.sig
    ./0209/rechnungen/12224_1031087.pdf
    ./0209/rechnungen/12224_1031087.pdf.sig
    ./0210/rechnungen/12224_1031373.pdf
    ./0210/rechnungen/12224_1031373.pdf.sig
    ./0211/rechnungen/12224_1031671.pdf
    ./0211/rechnungen/12224_1031671.pdf.sig
    ./0212/rechnungen/12224_1031965.pdf
    ./0212/rechnungen/12224_1031965.pdf.sig
    ./0213/rechnungen/12224_1032252.pdf
    ./0213/rechnungen/12224_1032252.pdf.sig
    ./0214/rechnungen/12224_1032545.pdf
    ./0214/rechnungen/12224_1032545.pdf.sig
    ./0215/rechnungen/12224_1032835.pdf
    ./0215/rechnungen/12224_1032835.pdf.sig
    ./0216/rechnungen/12224_1033123.pdf
    ./0216/rechnungen/12224_1033123.pdf.sig
    ./0217/rechnungen/12224_1033415.pdf
    ./0217/rechnungen/12224_1033415.pdf.sig
    ./0218/rechnungen/12224_1033692.pdf
    ./0218/rechnungen/12224_1033692.pdf.sig'
    
    
                                 suche=$(find ./ -name "$input*" | sort | cut -d/ -f2 | cut -c 1-4 | sort -u) #Suche der angegebenen Kundennummer im Rechnungspool
    find ./ -name "$input*" | sort | cut -d/ -f2 | cut -c 1-4 | sort -u
    ++ cut -d/ -f2
    ++ sort -u
    ++ cut -c 1-4
    ++ sort
    ++ find ./ -name '12224*'
    + suche='0200
    0201
    0202
    0203
    0204
    0205
    0206
    0207
    0208
    0209
    0210
    0211
    0212
    0213
    0214
    0215
    0216
    0217
    0218'
    
    
    
    
    
                    readargs(){ 
        while read num item  ; do
           printf "\"%s\" \"%s\" false "    "$num"  "$item"
        done < "$suche" ;
    }
    
    kdialog --radiolist "Test" $( readargs )
     readargs 
    ++ readargs
    /home/user/bin/1.Bash_Shell/Rechnungssuche: Zeile 19: 0200
    0201
    0202
    0203
    0204
    0205
    0206
    0207
    0208
    0209
    0210
    0211
    0212
    0213
    0214
    0215
    0216
    0217
    0218: Datei oder Verzeichnis nicht gefunden
    + kdialog --radiolist Test
    Grüße,

    iBlack
    Geändert von iBlack (13.10.16 um 08:50 Uhr)
    Superquadratisch, Galaktisch gut!

  15. #15
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.819
    Die Funktion gibt nichts zurück, weil die in einen Fehler läuft, jedenfalls taucht die printf Anweisung 'printf ""%s" "%s" false " "$num" "$item"' nicht in der Ausgabe auf, der Fehler dürft in Zeile 19 passieren.
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 30.07.11, 03:03
  2. Modem auf Netzwerk schleifen
    Von Scarabol im Forum Anbindung an die Aussenwelt
    Antworten: 20
    Letzter Beitrag: 27.04.11, 22:24
  3. CUPS/SWAT u.ä. durch Apache schleifen?
    Von net.slider im Forum Linux als Server
    Antworten: 2
    Letzter Beitrag: 02.10.05, 12:27
  4. Blicke durch die Freigaben bei Samba und den Benutzerrechten nicht durch
    Von Kaimane im Forum System installieren und konfigurieren
    Antworten: 9
    Letzter Beitrag: 20.10.03, 08:26
  5. 'for'-Schleifen Problem (bash/shell)
    Von fratzi im Forum Linux Allgemein
    Antworten: 2
    Letzter Beitrag: 02.02.03, 13:25

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •