tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
741
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von kevkev
    kevkev kevkev ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Beiträge
    620
    Hallo,

    Ich hatte mal eine Website gelesen auf der Stand wie man in Bash ein Menü macht.
    Ich meine jetzt so ein menü wie z.b. der midnight commander.

    Wie ist soetwas möglich?

    Noch ne Frage:
    Wie kann Ich es realisieren, in bash einstellungen, die der user festlegt, temporär für die laufzeit zu setzen?
    Gibt es soetwas wie Sprungmarken?

    Z.b.
    Der user tippt "3" ein, und komt auf die einstellungsseite. Hier gibt er z.b. seinen namen an, etc.
    Nach speichern kommt man wieder auf die startseite. ist soetwas möglich, wenn ja, wie?

    Noch ne frage :
    Wie kann ich z.b. in ftp rausfinden, in bash, ob z.b. der ordner schreibegschütz ist, was für rechte darauf sind, wieviel dateien sich drin befinden, die aktuelle upload und downloadgeschwindigkeit, etc.. wie bekomme Ich solche dinge raus? gibt es irgendwo eine seite wo solche sachen in bash beschrieben werden?

    Ok, ich dachte mir, ich sammle mal meine fragen, bevor ich wieder neue threads auf,mache !

    gruß kevin
     

  2. #2
    Registriert seit
    Aug 2004
    Ort
    nähe Wü
    Beiträge
    429
    Hi,

    ein Menü kannst du dir basteln in dem du z.B. sowas erstellst:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    f_main_menu() {
      clear
      printf "\n                    Aktualisieren von Nummern\n\n"
      printf "     Datenbank             : %50s\n" "$DATENBANK"
      printf "     Dateiname (*.csv)     : %50s\n\n" "$DATEI"
      
      cat <<-EOT
     
                        [1] - Datenbankname festlegen
                        [2] - User korrigieren
                        [3] - Dateiname festlegen    
     
                        [4] - Aktualisierung simulieren
                        [5] - Protokoll anzeigen
     
                        [6] - Aktualisierung starten
                        [7] - Wiederherstellen
     
     
                        [0] - Beenden
     
     
    EOT
      printf "      Auswahl: "
      read AUSWAHL
    }

    Eingaben die der Usermacht, werden in der Variable gespeichert der du sie zuweist. Also z.B.
    Code :
    1
    2
    3
    
    printf "geben sie ihren namen an:"
    read myname
    printf "ihr name ist also $myname"

    Das der User nach seiner eingabe wieder ins menü kommt geht auch... hänge an den Code oben einfach noch den Aufruf der Funktion (f_main_menu()) zur Ausgabe des Menüs an.

    //edit der böse, böse Fehlerteufel.
    Geändert von imweasel (25.08.05 um 13:45 Uhr)
     
    ---
    Der Uhu ist der Luchs unter den Adlern...
    Dieter Nuhr

  3. #3
    Avatar von kevkev
    kevkev kevkev ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Beiträge
    620
    Hi,

    Danke !
    Jetzt funktioniert alles wunderbar.

    Aber du weiß vielleicht nicht wie Ich diverse Sachen in ftp per bash überprüfen lassen kann? gerade wegen schreibrechten, etc.?

    gruß kevin

    EDIT: ein problem habe Ich das Ich nicht verstehe:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    function menu() {
        printf "[1] Suche starten";
        printf "[2] Einstellungen";
        printf "";
        printf "[0] Beenden";
    }
     
    echo menu();

    Wieso geht das nicht? Bash sagt:
    line 12: syntax error near unexpected token `('

    Aber wie rufe ich eine funktions sonst auf?

    gruß kevin
    Geändert von kevkev (25.08.05 um 14:44 Uhr)
     

  4. #4
    Registriert seit
    Aug 2004
    Ort
    nähe Wü
    Beiträge
    429
    Hi,

    zuerstmal die Frage wieso du immer am Zeilenende ein Semikolon (;) stehen hast Ich dachte du meinst die Shell und nicht PHP (o.ä.).

    Du musst eine Funktion nicht mit function name deklarieren, sondern einfach
    Code :
    1
    2
    3
    
    namederfunktion() {
    #hier jetzt deine Abläufe
    }
    schreiben. Aufrufen kannst du diese Funktion in deinem Skript mit namederfunktion.
     
    ---
    Der Uhu ist der Luchs unter den Adlern...
    Dieter Nuhr

  5. #5
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,

    schau mal:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    menu() {
            printf "[1] Suche starten\n"
            printf "[2] Einstellungen\n" 
            printf "\n" 
            printf "[0] Beenden\n"
    }
     
    menu  #aufruf von menu

    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  6. #6
    Avatar von kevkev
    kevkev kevkev ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Beiträge
    620
    Hi,

    @imweasel:
    oh, brauch man da kein ;? dachte das bräuchte man Naja, halt alle nochmal weg machen ! Danke !

    @RedWing:
    ok, danke !

    Danke euch beiden, wenns wieder Fragen gibt, komme Ich wieder !

    EDIT:
    Da bin ich auch schon wieder:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
    #!/bin/bash
     
     
    menu() {
        clear
        printf "\t[1] Suche starten\n"
        printf "\t[2] Einstellungen\n"
        printf "\n"
        printf "\t[3] Infos\n"
        printf "\t[4] Hilfe\n"
        printf "\n"
        printf "\t[0] Beenden\n"
     
        printf "\n\tAuswahl:\n"
        read auswahl
    }
     
    menu
     
    if [ $auswahl == "1" ]; then
        echo "Die Suche wird gestartet...";
    fi
     
    if [ $auswahl == "2" ]; then
        clear
        echo "Einstellungen"
        printf "\n"
     
        printf "\t[1] Test1\n"
        printf "\t[2] Test2\n"
        printf "\t[3] Test3\n"
        printf "\n\t[4] Abbrechen\n\n"
        printf "\t Auswahl:\n"
        read auswahl_2
     
        if [ $auswahl_2 == "4" ]; then
            menu
        fi
    fi

    Aber hier kann Ich doch nur max. einmal auf Einstellungen gehen, da ja sonst das Script beendet wird. Wie mache Ich das aber dynamisch?
    D.h. ich wähle einstellungen, klicke auf abbrechen, danach auf "suche starten" dann breche Ich wieder ab, und klick auf "Hilfe", etc.
    Da bräuchte Ich doch bis zum geht nicht mehr if oder case abfragen.

    Hier wäre wohl eine Sprungmarke das sinnigste, aber die gibts es doch glaube Ich nicht.
    Wie löse ich das denn sonst noch?

    gruß kevin
    Geändert von kevkev (25.08.05 um 15:23 Uhr)
     

  7. #7
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Gleich nochn Nachtrag:

    So kannst du ner Funktion auch Parameter übergeben:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    menu() {
            for i in $*  #alle parameter/ Alternativ ohne Schleife: Verwendung von $1- $9
            do
                    printf "Argument: $i\n"
            done
            printf "\n"
    }
     
    menu  "Ein String" 1 "Hallo" "Welt" #aufruf von menu

    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  8. #8
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Da bräuchte Ich doch bis zum geht nicht mehr if oder case abfragen.
    Dafür gibts doch schleifen :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    auswahl=1
    while [ $auswahl != "0" ]; do
            menu
     
            if [ $auswahl == "1" ]; then
                    echo "Die Suche wird gestartet...";
            fi
     
            if [ $auswahl == "2" ]; then
                    clear
                    echo "Einstellungen"
                    printf "\n"
     
                    printf "\t[1] Test1\n"
                    printf "\t[2] Test2\n"
                    printf "\t[3] Test3\n"
                    printf "\n\t[4] Abbrechen\n\n"
                    printf "\t Auswahl:\n"
                    read auswahl_2
            fi
            if [ $auswahl == "4" ]; then
                    menu 
            fi
    done

    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  9. #9
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Es gibt sogar in Bash ein spezielles Kommando um Menüs anzuzeigen und wiederholt anzuzeigen:
    Code :
    1
    2
    3
    
    select wort in Wohnen 'Essen & Trinken' Schlafen Lesen; do
      echo "$REPLY: $wort"
    done
    Wenn du die PS3 Variable änderst kannst du den Prompt bestimmen der dabei angezeigt wird. (siehe 'man bash')

    Das mit den Zugriffsrechten von FTP wird natürlich schwieriger (was willste denn eigentlich machen?). Das hängt dann von deinem FTP Client und auch vom Server ab (ich glaub nicht, das Windows FTP Server Zugriffsrechte besitzen so wie bei Unix Dateisystemen).

    So geht es z.B. mit dem Kerberos FTP Client:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    VERZ="/OS/Linux/Dist"
    USER="anonymous"
    PASS="xxx"
    ftp -i -u sunsite.mff.cuni.cz <<EOF
    user $USER $PASS
    ls $VERZ
    close
    EOF
    Die Ausgabe hängt allerdings wie gesagt vom Server ab.
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  10. #10
    Avatar von kevkev
    kevkev kevkev ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Beiträge
    620
    Hi,

    @RedWing:
    Danke, aber wenn Ich das so mache wie du es sagst komme Ich zwar in das Einstellungs menü, aber nicht in das 1. menü "Suche starten" !

    @deepthroat:
    Danke, werd Ich mir mal näher ansehen !

    Mhh, dachte das wäre einfacher, mhh, naja, egal !

    gruß kevin
     

  11. #11
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Danke, aber wenn Ich das so mache wie du es sagst komme Ich zwar in das Einstellungs menü, aber nicht in das 1. menü "Suche starten" !
    Das funktioniert schon du löschst die Ausgabe von suche starten nur gleich wieder...:

    Code :
    1
    2
    3
    
    menu() {
        clear
    ...

    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  12. #12
    Avatar von kevkev
    kevkev kevkev ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Beiträge
    620
    Hi,

    Ja aber, mhh...

    Ok, ich hab das mal mit Case gemacht:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
    menu() {
     
        printf "\t[1] Suche starten\n"
        printf "\t[2] Einstellungen\n"
        printf "\n"
        printf "\t[3] Infos\n"
        printf "\t[4] Hilfe\n"
        printf "\n"
        printf "\t[0] Beenden\n"
     
        printf "\n\tAuswahl:\n"
        read auswahl
    }
     
    auswahl=1
     
    while [ $auswahl != "0" ]; do
     
        case "$auswahl" in
     
            1)
                clear
                echo "Suche wird gestartet..."
                ;;
            2)
                clear
                printf "### Einstellungen ###\n\n"
     
                printf "\t[1] Test1\n"
                printf "\t[2] Test2\n"
                printf "\t[3] Test3\n"
                printf "\n\t[4] Abbrechen\n\n"
                printf "\t Auswahl:\n"
                ;;
            *)
                menu
                ;;
        esac
    done

    Aber auch da spinnt das alles ein wenig.

    Gruß kevin
    Geändert von kevkev (25.08.05 um 17:09 Uhr)
     

  13. #13
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Also ich hab das für dich jetzt mal a weng umgebastelt du musst halt probieren dann bekommst dus auch
    irgendwann hin...

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    menu() {
     
    printf "\t#####################\n"
    printf "\t### Mirror Script ###\n"
    printf "\t#####################\n"
    printf "\t[1] Suche starten\n"
    printf "\t[2] Einstellungen\n"
    printf "\n"
    printf "\t[3] Infos\n"
    printf "\t[4] Hilfe\n"
    printf "\n"
    printf "\t[0] Beenden\n"
     
    printf "\n\tAuswahl:\n"
    read auswahl
    }
     
    auswahl=1
     
    clear
    while [ $auswahl != "0" ]; do
            menu
            case "$auswahl" in
                    1)
                            echo "Suche wird gestartet..."
                            sleep 2
                            clear;;
                    2)
                            printf "### Einstellungen ###\n\n"
                            printf "\t[1] Test1\n"
                            printf "\t[2] Test2\n"
                            printf "\t[3] Test3\n"
                            printf "\n\t[4] Abbrechen\n\n"
                            printf "\t Auswahl:\n"
                            read auswahl2
                            case "$auswahl2" in
                                    1) echo "Test1";;
                                    2) echo "Test2";;
                                    3) echo "Test3";;
                            esac  
                            sleep 2
                            clear;;
    esac
    done

    btw deepthroats Variante mit dem select is aber die elegantere deswegen solltest du dadrauf
    zurückgreifen...
    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  14. #14
    Avatar von kevkev
    kevkev kevkev ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Beiträge
    620
    Hi,

    Ich habe es hinbekommen !
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    
    menu() {
    printf "\t[1] Suche starten\n"
    printf "\t[2] Einstellungen\n"
    printf "\n"
    printf "\t[3] Infos\n"
    printf "\t[4] Hilfe\n"
    printf "\n"
    printf "\t[0] Beenden\n"
     
    printf "\n\tAuswahl:\n"
    read auswahl
    }
     
    menu
     
    while true; do
     
        case $auswahl in
            1)
                clear
                printf "\tSuche wird gestartet...\n\n"
     
                printf "\t[Abbrechen]\n"
                read abbrechen
                    case $abbrechen in
                        *) menu;;
                    esac
                ;;
            2)
                clear
                printf "\t### Einstellungen ###\n\n"
                printf "\t[1] Zurück\n"
     
                printf "\t[2] Infos\n\n"
                read auswahl_2
     
                case $auswahl_2 in
                    1) menu;;
                    2)
                        clear
                        printf "\t### Infos ###\n\n"
     
                        printf "\t[1] Zurück\n"
                        read auswahl_3
     
                        case $auswahl_3 in
                            1) auswahl_2;;
                        esac
                esac
        esac
    done

    So gehts wunderbar Danke .

    gruß kevin
     

Ähnliche Themen

  1. Ein paar Fragen zu MFC
    Von aspMofL im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 16.10.08, 08:01
  2. Paar Fragen
    Von Blatt im Forum Visual Basic 6.0
    Antworten: 12
    Letzter Beitrag: 19.06.06, 18:48
  3. Ein paar Fragen
    Von Hankys im Forum 3D Studio Max
    Antworten: 3
    Letzter Beitrag: 21.04.03, 14:55
  4. Ein paar Fragen zu C++
    Von dfp im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 14.01.02, 10:44
  5. Ein paar Fragen [HELP] ...
    Von SerpenteS-X- im Forum 3D Studio Max
    Antworten: 15
    Letzter Beitrag: 08.01.02, 15:11