Ein paar Fragen

kevkev

Erfahrenes Mitglied
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 :D!

gruß kevin
 
Hi,

ein Menü kannst du dir basteln in dem du z.B. sowas erstellst:
Code:
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:
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.
 
Zuletzt bearbeitet:
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:
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
 
Zuletzt bearbeitet:
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:
namederfunktion() {
#hier jetzt deine Abläufe
}
schreiben. Aufrufen kannst du diese Funktion in deinem Skript mit namederfunktion.
 
Hallo,

schau mal:

Code:
menu() {
        printf "[1] Suche starten\n"
        printf "[2] Einstellungen\n" 
        printf "\n" 
        printf "[0] Beenden\n"
}

menu  #aufruf von menu

Gruß

RedWing
 
Hi,

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

@RedWing:
ok, danke :)!

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

EDIT:
Da bin ich auch schon wieder:
Code:
#!/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
 
Zuletzt bearbeitet:
Gleich nochn Nachtrag:

So kannst du ner Funktion auch Parameter übergeben:
Code:
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
 
Da bräuchte Ich doch bis zum geht nicht mehr if oder case abfragen.

Dafür gibts doch schleifen ;) :

Code:
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
 
Hi.

Es gibt sogar in Bash ein spezielles Kommando um Menüs anzuzeigen und wiederholt anzuzeigen:
Code:
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:
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.
 
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" :confused: !

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

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

gruß kevin
 
Zurück