Hilfe zu 'dialog' Konstrukt... ich peils net ^^

E

-eraz-

Tripel-As
Ich bau gerade mein erstes Skript mit dialog. Hatte bis jetzt auch nen guten Lauf, aber jetzt komm ich grad nicht mehr weiter. Im brauche ein Inputmenu mit mehreren Feldern. Dazu gibt es auch passende Samples. Aber ich steig nicht ganz durch was da genau passiert, kann mir das vielleicht jemand erklären?

Hier das Sample das mit dabei ist:
Code:
#! /bin/bash
# $Id: inputmenu,v 1.6 2004/09/19 17:59:14 tom Exp $
# 2002 - written by Tobias Rittweiler <tobrit@freebits.de>
: ${DIALOG=dialog}

user="$USER"    ; uid="$UID"   ;
gid="$GROUPS"  ; home="$HOME"  ;

while [ ${returncode:-99} -ne 1 -a ${returncode:-99} -ne 250 ]; do
       exec 3>&1
       value=$("$DIALOG" --clear --ok-label "Create" \
                          --backtitle "An Example for the use of --inputmenu:" \
                          --inputmenu "Originally I designed --inputmenu for a \
configuration purpose. Here is a possible piece of a configuration program. \
" 20 50 10 \
"Username:" "$user" \
"UID:"      "$uid" \
"GID:"      "$gid" \
"HOME:"     "$home" \
2>&1 1>&3 )
       returncode=$?
       exec 3>&-
       case $returncode in
       1)
               "$DIALOG"  --clear --backtitle "An Example for the use of --inputmenu:" \
                               --yesno "Really quit?" 10 30
               case $? in
                       0) break;;
                       1) returncode=99;;
               esac
               ;;
       0)
               "$DIALOG" --clear --backtitle "An Example for the use of --inputmenu:"  \
                        --msgbox "useradd \n\
                                -d $home \n\
                                -u $uid \n\
                                -g $gid \n\
                                $user" 10 40
               ;;
       3)
               value="${value:8:${#value}}"
               tag="${value%:*}"
               item="${value#*: }"

               case "$tag" in
                       Username) user="$item";;
                       UID) uid="$item";;
                       GID) gid="$item";;
                       HOME) home="$item";;
               esac
               ;;

       255)
                echo "ESC pressed."
                break
                ;;

       esac
done

Wie die Schleife mit dem $returncode funktioniert versteh ich eigentlich am wenigsten.
 
Zuletzt bearbeitet:
Hi,

Am unklarsten ist mir eigentlich exitcode 3.

Du meinst returncode, ich hab jetzt erstmal nach nem "exit 3" statement gesucht. ;)

Bei den drei Arrayvariablen(?) $value $tag und $item versteh ich nicht wirklich was da genau passiert.

Das hat nichts mit Arrays zu tun, es sei denn du betrachtest einen String als einen Character Array.

Du solltest dir dafuer parameter expansion mal angucken. Z.B.:
http://tldp.org/LDP/abs/html/refcards.html#AEN22102
http://www.network-theory.co.uk/docs/bashref/ShellParameterExpansion.html

Vielleicht hilft ja dieses Beispiel:
Code:
$ value="12345678: foo:bar"
$ echo ${value:8:${#value}} # substring von position 8 bis string_ende
: foo:bar
$ echo ${value#*: }
foo:bar
$ echo ${value%:*}
12345678: foo

Wie die Schleife mit dem $returncode funktioniert versteh ich eigentlich am wenigsten.
Code:
while [ ${returncode:-99} -ne 1 -a ${returncode:-99} -ne 250 ]; do
Auf Deutsch: Solange $returncode (default 99) nicht 1 und nicht 250 ist, wiederhole folgendes...

mfg,
bytepool
 
Danke für die Links, die werd ich mir mal zu Gemüte führen.

Jetzt hab ich leider grad ein kniffliges Problem. Ich hab per dialog eine form erstellt, nachdem man die form ausgefüllt hat, soll eine Passwortabfrage kommen. Danach soll's wieder normal weitergehen. Die Form soll von der Passwortabfrage nicht überschrieben werden. Leider bekomme ich da aber Probleme mit den Rückgabewert der Form wenn ich es so mache:

Code:
   dialog --keep-window --backtitle "$title" --title "  Domänenjoin  " --help-button --ok-label "Weiter" --cancel-label "Zurück" \
         --form "
        Bitte befüllen Sie alle Zeilen. \n"  20 57 0 \
        "Domain:"               1 2 "$domain"           1 20 30 0\
        "Domaincontroller:"     2 2 "$domaincontroller" 2 20 30 0\
        "SRVAdmin:"             3 2 "$srvadmin"         3 20 30 0\
        "DomainAdmin:"          5 2 "$domainadmin"      5 20 30 0 2>>$tempfile \
        --and-widget --clear --insecure --passwordbox "Passwort Domänenadmin:" 8 30 $domainpwd 2>>$tempfile \

   retval=$?
   case $retval in
      0)

Entweder: Wie bekomme ich den Rückgabewert von der Form??
Oder: Kann ich das Passwort irgendwie anders abfragen ohne die Form zu "Übermalen"?
 
Zuletzt bearbeitet:
Hi,

Entweder: Wie bekomme ich den Rückgabewert von der Form??
Oder: Kann ich das Passwort irgendwie anders abfragen ohne die Form zu "Übermalen"?

so wie ich die manpage verstehe ist das nicht moeglich. Allerdings denke ich auch dass die Programmlogik fehlerhaft ist. Da die Passwortabfrage bedingungslos ist, macht es fuer mich deutlich mehr Sinn die Abfrage vor dem zeigen der Form zu machen. Ansonsten kaeme ich mir als User ein wenig verarscht vor, wenn ich mir erst die Muehe mache alles fein auszufuellen, nur um dann eine PW Abfrage vor die Nase gesetzt zu bekommen, auf die ich keine Antwort habe.

Wenn die Abfrage wiederum nicht bedingungslos ist, also abhaengig von der ausgefuellten Form, macht es IMHO mehr Sinn die Form erst auszuwerten, und dann die Abfrage zu bringen.

Edit:
Es sei denn du bereitest dich auf eine neue Stelle als BPFH vor, dann bist du sicherlich auf dem richtigen Weg, nur Uebung macht den Meister. ;)

mfg,
bytepool
 
Zuletzt bearbeitet:
Was ist ein BPFH? ^^
kaeme ich mir als User ein wenig verarscht vor, wenn ich mir erst die Muehe mache alles fein auszufuellen, nur um dann eine PW Abfrage vor die Nase gesetzt zu bekommen
Da hast du natürlich Recht. Deshalb bräuchte ich vorher den Rückgabewert der Form um ein wenig Code auszuführen der befüllte Spalten in eine Variable schreibt (siehe $domain $domaincontroller usw.)
Noch dazu kommt leider das Problem, dass wenn der Benutzer auf "Zurück" klickt er ebenfalls das Passwort eingeben muss, sehr sinnlos...

Ansonsten würde sich die Abfrage dort super einfügen. :think:
 
Zuletzt bearbeitet:
Hi,
Was ist ein BPFH? ^^
ein Bastard Programmer From Hell, in Anlehnung an den BOFH. ;)

Da hast du natürlich Recht. Deshalb bräuchte ich vorher den Rückgabewert der Form um ein wenig Code auszuführen der befüllte Spalten in eine Variable schreibt (siehe $domain $domaincontroller usw.)
Aber warum machst du da dann nicht einfach 2 Dialoge von? Nur weil es nicht schoen genug aussieht? Dann wuerde sich dein Problem, wie ich es verstehe, in Luft aufloesen.

mfg,
bytepool
 
Nur weil es nicht schoen genug aussieht? Dann wuerde sich dein Problem, wie ich es verstehe, in Luft aufloesen.
Ja, nur wegen der Schönheit, was macht man nicht alles dafür. :D
Nein also wenn mir nix anderes mehr einfällt, dann muss ich es eh in zwei Teile aufsplitten.
 

Ähnliche Themen

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

Samba-Server mit Univention Corporate Server

[Perl] Perl OO Methodenaufruf in anderem Objekt

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

AWK Tip gesucht

Zurück
Oben