Fragen zur Linuxserveradministration (Fallunterscheidung)?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Mein Lehrbuch sagt leider nichts dazu.

Mein erster Tipp hierzu wäre

man bash

zu lesen (oder welche Shell Du auch immer verwendest). Und ohne eine Shell zur Verfügung zu haben und aus einem Lehrbuch versuchen zu lernen, kann das meiner Meinung nach nichts werden. Da muss man offen gesagt wirklich fast jeden Fehler mal selbst gemacht haben und einen Spieltrieb für Try and Error haben.

Jetzt zur Frage:

while [ $1 ]

Führe aus solange etwas im Eingabepuffer ist, der mit shift immer das nächste Wort vorne hat (eigentlich ist das "[ $1 ]" eine logische Funktion die TRUE oder FALSE ergibt und de-facto heißt das "solange wahr")

case $1 in

prüft die Eingabe $1 auf einen Match mit den folgenden mit ")" abgeschlossen Ausdrücke. Matched $1 mit dem Ausdruck, wird das mit dem nachfolgenden Kommando folgende ausgeführt (bis zum ;;) und der case Block (abgeschlossen mit esac) danach instantan beendet (i.e nicht auf weitere Matches geprüft).

Das "in" leitet nur die verschiedenen Möglichkeiten, die geprüft werden sollen, ein und hat keine separate Bedeutung ohne das case.

Tichuspieler 
Fragesteller
 26.07.2023, 18:48
Mein erster Tipp hierzu wäre
man bash
zu lesen (oder welche Shell Du auch immer verwendest). Und ohne eine Shell zur Verfügung zu haben und aus einem Lehrbuch versuchen zu lernen, kann das meiner Meinung nach nichts werden. Da muss man offen gesagt wirklich fast jeden Fehler mal selbst gemacht haben und einen Spieltrieb für Try and Error haben.

Eigentlich bin ich da bei Dir. Jetzt kommt von meiner Seite aus aber das ganz große Aber: Explizit bei solchen Fällen (wie der in meiner Frage beschriebene) wäre es für mich so, dass ich vielleicht sehe, dass das Skript funktioniert, aber mir fehlt dann das Grundwissen, WARUM es funktioniert.
Und - ja, es mag sein, dass ich in diesem Punkt vielleicht seltsam bin, aber mir reicht es nicht unbedingt zu wissen, dass es so funktioniert. Mir ist da tatsächlich die Grundlage genauso wichtig.
Für mich ist es so, dass ich erst dann in der Lage bin, eine Geschichte zu schreiben, wenn ich sämtliche Buchstaben des Alphabets kenne.

while [ $1 ]
Führe aus solange etwas im Eingabepuffer ist, der mit shift immer das nächste Wort vorne hat (eigentlich ist das "[ $1 ]" eine logische Funktion die TRUE oder FALSE ergibt und de-facto heißt das "solange wahr")

Das verstehe ich :-) Vielleicht bin ich doch kein hoffnungsloser Fall ...;-)

case $1 in
prüft die Eingabe $1 auf einen Match mit den folgenden mit ")" abgeschlossen Ausdrücke. Matched $1 mit dem Ausdruck, wird das mit dem nachfolgenden Kommando folgende ausgeführt (bis zum ;;) und der case Block (abgeschlossen mit esac) danach instantan beendet (i.e nicht auf weitere Matches geprüft).

Ja, auch da bin ich mit Dir konform. Übrigens habe ich Dank Dir jetzt ein neues Wort gelernt: Den Begriff "instantan". Den kannte ich bis heute auch noch nicht.

Das "in" leitet nur die verschiedenen Möglichkeiten, die geprüft werden sollen, ein und hat keine separate Bedeutung ohne das case.

Und das war der Missing Link für mich. Nicht nur, dass ich jetzt weiß, was er bedeutet, ich habe auch gelernt, dass "in" außerhalb von "case" keine seperate Bedeutung hat.
Ich gebe es zu: Ich mag es sehr, aus Büchern zu lernen, aber manchmal kommt es mir so vor, dass manche Autoren so schreiben, dass es für sie logisch und verständlich ist und dabei außer Acht lassen, dass den Lernenden das Hintergrundwissen fehlt :-/

Schön, dass es User wie Dich (und den beiden anderen, die mir geantwortet haben natürlich auch) gibt, die einem Lernenden in verständlichen Worten weiterhelfen.

Dankeschön dafür :-)

0
Woher ich das weiß:Berufserfahrung – Linux Administrator
Tichuspieler 
Fragesteller
 26.07.2023, 21:11

Hallo Renecap,

vielen lieben Dank für die Links. Ich habe mir die Seite in meine Favoriten gepackt. Sie ist sehr informativ und für mein Verständnis trotz der knappen Worte gut geschrieben, dass ich den Sinn verstehe :-)

0
Renecap  27.07.2023, 10:44
@Tichuspieler

Manchmal ist Litaeratur nicht einfach ,aber ich kaufe mir diese "bibel" jedes Jahr neu und ich finde das dieser Text besser verständlicher und einfacher gehalten ist als in so manch anderen Literarischen Werken z.B. bei Addison Wesley Verlag.

0

Vielleicht wird das etwas klarer, wenn man das in Pseudocode-Syntax schreibt:

so lange $1 existiert{
    unterscheide basierend auf $1{
        falls es "stop" ist: schreibe "halt"; exit program;
        falls es mit "-" anfängt: schreibe "Option: $1";
        falls es irgendwas anderes ist: schreibe "Argument $1";
    }
}
Woher ich das weiß:Studium / Ausbildung – Informatik
Tichuspieler 
Fragesteller
 26.07.2023, 18:30

Hallo Waldelb3,

danke auch für Deine Antwort.
Ich habe das Wort "while" mit "während"/"Weile" übersetzt, weil ich es so kenne und auch im Internet diese Übersetzungen gefunden habe.
Der Hinweise auf "So lange" hat mir da sehr weitergeholfen. :-)
Und das mit dem "in" (ich nehme an, Zeile 2 basiert darauf) verstehe ich jetzt auch :-)

0
Wofür steht das Wort "while"?

Für eine Schleife.

Ist "case" ein Befehl/Kommando in der Linuxserveradministration?

Vermutlich, sonst würde man es nicht verwenden. Dürfte eine Fallunterscheidung durchführen.

Was hat es mit dem Schlüsselwort "in" auf sich?

Gehört wahrscheinlich zum "case" dazu.

Siehe auch:

https://ss64.com/bash/case.html

Tichuspieler 
Fragesteller
 26.07.2023, 17:11

Hallo Destraxix,

vielen lieben Dank für Deine Antwort :-)

Das "case" eine Fallunterscheidung einleiten dürfte, macht Sinn für mich. Das "while" für Schleife steht, war mir nicht bewusst. Ich kenne es als "während" bzw. - wenn ich es als Nomen ansehe, "Weile".

Danke für den Link. Ich schaue mir die Seite in Ruhe an. :-)

0
Destranix  26.07.2023, 17:12
@Tichuspieler
Ich kenne es als "während" bzw. - wenn ich es als Nomen ansehe, "Weile".

Man würde es hier eher mit "Solange" übersetzen. Üblicher Syntax ist etwas in der Form

Solange <Bedingung> tue
...
Ende der Schleife
1
Tichuspieler 
Fragesteller
 26.07.2023, 18:24
@Destranix

Ah! So ist es für meine Wenigkeit verständlicher. Danke für die Erklärung.

1