Gehe zu zeile in script?

metalllike

Grünschnabel
Hallo zusammen.
Mal eine ganz dumme frage.
gibt es einen Befehl wie früher unter qBasic goto [zeile]

das script was ich (versuche) zu schreiben soll eigendlich nur eine sache immer wieder wiederholen, wenn der programmablauf beendet ist bzw wieder von vorne anfangen.
oder wie kann ich das realisieren?

Das script soll folgendes können:
1 ausgeben ---> was soll hinzugefügt werden
2 eingabe durch benutzer
3 ----> daten hinzufügen
4 ausgeben ----> die daten sind hinzugefügt
5 ausgeben --->möchten sie auserdem noch was hinzufügen?
6 ja/nein
7 bei ja gehe zu 1
8 bei nein ende.

Bis zeile 5 (bzw 6) habe ich alles fertig und auch winderbar ohne probleme. nur weiß ich nicht wie ich zeile 7 realisieren kann. zeile 8 ist auch wieder klar. da zeile 6-8 mit while case ... geschrieben sind.

Gruß
Metalllike
 
Hi.
metalllike hat gesagt.:
Hallo zusammen.
Mal eine ganz dumme frage.
gibt es einen Befehl wie früher unter qBasic goto [zeile]
Also um diese Frage beantworten zu können, müßtest du erstmal sagen welche Shell du überhaupt programmierst. Bash? (t)csh? zsh?

Hast du denn keine Dokumentation für deine Shell installiert? Da steht das bestimmt alles drin. Für bash gibt es definitiv kein goto. goto ist böse!

metalllike hat gesagt.:
das script was ich (versuche) zu schreiben soll eigendlich nur eine sache immer wieder wiederholen, wenn der programmablauf beendet ist bzw wieder von vorne anfangen.
oder wie kann ich das realisieren?
Mit einer Schleife, Funktionen und einer case Anweisung. Schau mal in die Dokumentation.

Gruß
 
deepthroat hat gesagt.:
.Für bash gibt es definitiv kein goto. goto ist böse!
So schlimm find ich goto eigentlich garnicht. Das gibt es ja selbst auf CPU-Ebene, in Assembler kann man z.B. mit JMP (und auch bedingt Jumps wie z.B. JNE) Codeteile ueberspringen.
Und ich koennte es im Moment auch garnicht so schlecht gebrauchen um eine Resume-Funktion in meine LFS-Scripts zu bauen.
 
//OFFTOPIC

deepthroat hat gesagt.:
Für bash gibt es definitiv kein goto. goto ist böse!

Nur bedingt.
Auszug aus /lib/modules/`uname -r`/build/Documentation/CodingStyle:

Code:
                Chapter 6: Centralized exiting of functions

Albeit deprecated by some people, the equivalent of the goto statement is
used frequently by compilers in form of the unconditional jump instruction.

The goto statement comes in handy when a function exits from multiple
locations and some common work such as cleanup has to be done.

The rationale is:

- unconditional statements are easier to understand and follow
- nesting is reduced
- errors by not updating individual exit points when making
    modifications are prevented
- saves the compiler work to optimize redundant code away ;)

int fun(int a)
{
        int result = 0;
        char *buffer = kmalloc(SIZE);

        if (buffer == NULL)
                return -ENOMEM;

        if (condition1) {
                while (loop1) {
                        ...
                }
                result = 1;
                goto out;
        }
        ...
out:
        kfree(buffer);
        return result;
}

Gruß,
RedWing
 
Oh, hab ich nicht mit gerechnet das meine unbedachte Aussage gleich solche Wellen schlägt. :)

Wenn man goto mit Bedacht einsetzt (und nicht als Ersatz für Funktionen bzw. Schleifen) dann hat es durchaus seine Berechtigung.

Gruß
 
Dennis Wronka hat gesagt.:
Na Du kannst froh sein, dass wir heut so gut drauf sind. Sonst waer naemlich schon laengst ein Lynchmob auf dem Weg zu Dir. :D ;)
Puh, heute hab ich aber auch ein Schwein. :) Obwohl den Strafzettel heute früh wo ich nur ganz kurz gehalten hab um Blumen zu kaufen fand ich nicht so toll... :(

Gruß
 
HILFE
Wow hab ja nie damit gerechnet das so viele antworten hier auflaufen.

Also um Klartext für mein "goto" rein zu bekommen
Zum einen ich benutze die Bash und zum Rest:

Ich will wenn der Benutzer das Script aufruft das erstmal überprüft wird ob er root ist.
FERTIG und .
Dannach soll der Benutzer eine Eingabe machen. Und hier wird´s schwierig.
Und zwar soll der Benutzer Domains anlegen können ohne sich die Finger wund zu tippen bis die DNS einträge die Apache configs gemacht wurden, Verzeichnisse für das www bla bla bla evtl noch postfix configurieren usw.
also soll wenn der Benutzer test.de eingibt, automatisch alle Eintärage und configs für test.de in allen Server die vorhanden sind vornehmen.
Alles läuft spitzen mäßig bis zum Programm ende. Allerdings soll das Programm nicht einfach beendet werden sonder erstmal die frage stellen ob eine Domain dem System hinzugefügt werden sollen.
wenn ja dann wieder ab Eingabe der Domain und wieder durchführen. Und wenn er wieder zum ende kommt wieder fragen ob eine weitere Domain hinzugefügt werden soll...

Wird aber die letzte frage mit nein beantwortet soll das Programm beendet werden oder halt andere Sachen erledigen. z.b eine Domain wieder löschen... oder mir einen schönen Tag wünschen und mich nach meinem Namen fragen *lach*

Und da ich ganz früher mal qBasic programmiert habe kenne ich den Befehl GOTO. wusste jetzt nicht ob´s sowas auch für shell gibt. Und wenn ich das mit einer schleife programmiere? wie soll das aussehen?

Gruß
Metalllike
 
Wie gesagt solltest du dir ruhig mal die Handbücher bzw. den Advanced Bash-Scripting Guide zu Gemüte führen.

Bash besitzt für solche Auswahlmöglichkeiten ein extra Kommando:
Bash:
PS3="Auswahl (1-3): "

select auswahl in "neue Domäne" "Domäne entfernen" "Ende"; do
  case $auswahl 
    1) new_domain ;;
    2) delete_domain ;;
    3) break;;
    *) echo "nicht unterstützte Auswahl: $REPLY" >&2 ;;
  esac
done
Gruß
 
Zurück