Shell-Fragen

Pixelcoffee

Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
21
Hallo allerseits! Ich habe ein paar Fragen bzgl einer .sh Datei, die ich gerade auf meinem MacBook schreibe.

1. Ich will am Anfang ein .txt File mit einer bestimmten Größe erstellen. Dazu nutze ich den mkfile Befehl. Wie aber schaffe ich es, im Terminal ein Kommando zu erzeugen, dass danach fragt, wie groß die Datei (bspw 100 Megabyte) sein soll? Sodass man individuell einen Wert angeben kann und ein File in einer vom User eingegebenen Größe erstellt wird.

2. Wie kann ich einen bestimmten Abschnitt loopen? Nach der Art "Loop" und später am Ende "Go To Loop", und zwar für eine bestimmte Anzahl, die ich (wie oben auch) immer neu im Terminal eingeben kann?
z.B. 100 Durchgänge, und dann springt das Script weiter auf einen Befehl nach dem Loop.

3. Ganz banal: Wie ändere ich die Farbe (nicht in den Terminal Einstellungen, sondern im Skript als Befehl selber)? Sodass wenn ich die Shell ausführe, das Terminalfenster z.B. mit schwarzem Background und grüner Schrift erscheint?

4. Wie erstelle ich einen Counter, der die Anzahl der Durchgänge in des Loops oben und die insgesamt Anzahl an übertragenen Byte mitzählt und im Terminal mit anzeigt?

Über Antworten würde ich mich wirklich freuen! :)
 

electricdawn

Mitglied
Mitglied seit
01.12.2004
Beiträge
11.289
Ich wuerde ein gutes *nix Grundlagenbuch empfehlen, mit Schwerpunkt auf der Shell. Im Moment faellt mir da keins ein, aber es gibt auch bestimmt gute Seiten im Internet.
 

warnochfrei

Mitglied
Mitglied seit
02.03.2019
Beiträge
1.337
Bei Fragen zu "der Shell" empfehle ich mit Antworten zu warten, bis der Fragesteller sich dazu geäußert hat, in welcher Shell er zu Skripten gedenkt. POSIX sh? zsh? fish? ksh? bash?
Gerade, was die zweite und die vierte Frage betrifft, wird es sonst anstrengend.
 

Pixelcoffee

Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
21
Es geht um eine .sh Datei.

Danke schon mal bis dahin für die Antworten und die Links!

Trotzdem hätte ich gerne noch ein paar konkretere Beschreibungen zu 1. - 4.
 

mikne64

Mitglied
Mitglied seit
02.04.2004
Beiträge
3.272
Hallo,

ein fertiges Skript wirst Du hier nicht bekommen. :D

Zu
1. Du könntest die Dateigröße als Parameter beim Aufruf des Skript mitgeben oder im Skript mit read abfragen.
Per Aufrufparameter ist möglicherweise eleganter.
2. Wurde schon genannt, schau Dir Schleifen an.
3. Wird das Skript entfernt aufgerufen, kommt die Farbeinstellung nicht zum Tragen. Welchen Sinn soll diese Farbvorgabe haben? :kopfkratz:
4. Wird nicht so einfach zu realisieren sein. Suche mal nach den Begriffen Fortschrittsballken Shell Terminal.

Hinweise zu Grundlagen und Literatur wurden hier schon genannt.

Viele Grüße
 

electricdawn

Mitglied
Mitglied seit
01.12.2004
Beiträge
11.289
Es ist völlig egal, welche Shell er/sie benutzt. Wenn es ein Mac ist, wird es höchstwahrscheinlich bash sein, ab Catalina dann halt zsh. Aber ich würde mich eher mal in die Shell und Scripting einlesen, bevor ich mit solchen Fragen komme.

PS: Generell sollte der/die TE sich erstmal mit der UNIX-Philosophie des "Keep it simple." befassen.
PPS: Ach ja, Englisch-Kenntnisse sind hier definitiv ein Vorteil. ;)
 

Pixelcoffee

Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
21
Die Farben kann man bei Batch Dateien auf Windows doch auch festlegen. Mit einem bestimmten Quellcode wird das Eingabeaufforderungs Fenster z.B. jedes mal schwarz mit grüner Schrift angezeigt. Es gibt sogar für jede erdenkliche Farbe einen Wert. Geht das bei Shell/Bash Dateien für das Terminal etwa gar nicht?
 

electricdawn

Mitglied
Mitglied seit
01.12.2004
Beiträge
11.289
Dachte ich mir. UNIX =/= Windows. Das wirst Du noch lernen. Fange mal mit einem guten UNIX Buch an. Der Rest kommt dann. Du kannst die Shell in UNIX vage mit der PowerShell in Windows vergleichen vom Funktionsumfang. Und noch einmal:

Für UNIX gilt: "Keep it simple."

PS: Du musst bedenken, dass UNIX aus einer Zeit stammt, als man noch genau zwei Farben hatte: Gräulichesgraugrünbraunsonstwas und was auch immer die Phosphorschicht der Kathodenstrahlröhre so als Farbe hergab. Erst später sind Farben dazugekommen. Ja, man kann Farben in der Shell ansprechen. Wird nur niemand tun, da es zu sehr von der Hardware des Nutzers abhängt.

Bedenke: UNIX läuft (fast) überall. Windows und CMD.exe laufen "nur" auf Windowskompatiblen Rechnern. (Auch wenn die mittlerweile die Mehrheit sind)

PPS: Ok, ich habe etwas Blödsinn gelabert. Man KANN Farben definieren über ANSI-Druckbefehle. Und ja, das wird auch teilweise gemacht. Ist aber im Regelfall für ein kleines Skript irrelevant. Das soll erst mal laufen. Dann kann man hinterher immer noch "verschönern".
 

Pixelcoffee

Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
21
PPS: Ok, ich habe etwas Blödsinn gelabert. Man KANN Farben definieren über ANSI-Druckbefehle. Und ja, das wird auch teilweise gemacht. Ist aber im Regelfall für ein kleines Skript irrelevant. Das soll erst mal laufen. Dann kann man hinterher immer noch "verschönern".
Ich würde trotzdem gerne mal erfahren, wie ich das mit einbaue.
Danke aber auf jeden Fall für die Antwort, habe jetzt auf jeden Fall einen besseren Überblick erhalten.
 

electricdawn

Mitglied
Mitglied seit
01.12.2004
Beiträge
11.289
Noch einmal: Bevor ich Farben einbaue, sollte ich erst einmal die Grundlagen der Shellprogrammierung verstehen.

Wirklich. ;)
 

Schiffversenker

Mitglied
Mitglied seit
25.06.2012
Beiträge
10.920
Die Farben kann man bei Batch Dateien auf Windows doch auch festlegen. Mit einem bestimmten Quellcode wird das Eingabeaufforderungs Fenster z.B. jedes mal schwarz mit grüner Schrift angezeigt. Es gibt sogar für jede erdenkliche Farbe einen Wert. Geht das bei Shell/Bash Dateien für das Terminal etwa gar nicht?
Das betrifft dann eher das Terminal oder die Alternativen dazu als die eigentliche Shell.
Das überlappt beim Arbeiten sicher, aber so ganz fundamental sollte man schon trennen zwischen Shell - also der UNIX-Kommandoebene - und dem Terminal - also dem macOS-GUI-Fenster, das den Zugriff auf die Shell erlaubt.
Farben, Schriften usw. sind immer eine Frage des Terminals oder des Ersatzprogramms.
Die Shell kennt nur Eingabe und Ausgabe.
 

Pixelcoffee

Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
21
Könnte ich dann eventuell dem Terminal sagen, es soll immer in einer bestimmten Farbe erscheinen, wenn ich diese bestimmte .sh Datei öffne?
Wenn ja, wie stelle ich das ein? Kann immer nur die Farbe für das Terminal allgemein ändern.
 

Pixelcoffee

Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
21
Nochmal eine Frage zu den Schleifen:

Wie baue ich die konkret ein? Mit welchem Quellcode?
 

Pixelcoffee

Mitglied
Thread Starter
Mitglied seit
16.03.2019
Beiträge
21
Uhm... lerne doch erstmal die Shell überhaupt zu benutzen...

Was willst Du unbedingt ums Verrecken das Pferd vom Ende her aufzäumen? :noplan:

PS: Ein einfaches "bash Tutorial" in DuckDuckGo hat mir gleich zig Seiten hervorgebracht, die Dir beibringen können, wie all das funktioniert.
PPS: Das hier z.B. https://linuxconfig.org/bash-scripting-tutorial (Ohne Gewähr!)

Aber das Problem ist doch, dass es beim Mac anders als bei Linux ist, Unix hin oder her! Einige Linux Befehle haben bei meinem MacBook nicht funktioniert... einige...

Aber trotzdem danke für alles!
 

Schiffversenker

Mitglied
Mitglied seit
25.06.2012
Beiträge
10.920
Noch einmal: Bevor ich Farben einbaue, sollte ich erstmal die Grundlagen der Shellprogrammierung verstehen.

Wirklich. ;)
Wenn die Farben hilfreich sind wie etwa bei manchen Programmierumgebungen, könnte ich mir denken, daß das bereits recht früh sinnvoll sein könnte.
Allerdings sehe ich bei der Shell selbst wenig Möglichkeiten dafür.
Eher bei Shellskripten.

Aber ich kenne das schon aus ganz frühen Zeiten. Bevor man sich aufrafft, anzufangen, ist es schön, erstmal endlos lange sozusagen den Schreibtisch einzurichten oder das ganze Arbeitszimmer, bzw. am Rechner alles hübsch zu machen, vielleicht sogar alle Zusatzprogramme oder Extensions runterzuladen, die man vielleicht irgendwann mal brauchen könnte. Hauptsache, man kann sich erstmal um die eigentliche Aufgabe drücken. Was vor den Computern halt nicht so lange aufgehalten hat.
Wer weiß, ob Goethe mit Computer die Neunte komponiert hätte oder Schiller den Faust. Oder ob Heine die Loreley ausgeufert hätte zu einem dicken Wälzer, so wie viel Bestsellerautoren heute ihre Werke aufblähen. Weil man ja so leicht alte Teile wieder klickklick einfügen kann oder aus gutem Grund mal rausgenommene Nebenhandlungen.

Die Menschen, die dafür vorherbestimmt sind, investieren (leider) viel mehr Zeit in das Drumherum und das Sichvorderaufgabedrücken als sie für die eigntliche Aufgabe dann brauchen. Oder brauchen würden, denn oft sind sie dann leider ausgeschieden.
Wieviele gute Romane mögen uns dadurch entgangen sein, weil Autoren immer noch überlegen, ob sie lieber Times als Schrift nehmen oder Geneva?
 

electricdawn

Mitglied
Mitglied seit
01.12.2004
Beiträge
11.289
Mac anders als bei Linux ist, Unix hin oder her! Einige Linux Befehle haben bei meinem MacBook nicht funktioniert... einige...
Ich denke eher, dass das an einer anderen Shell liegt, als an Linux. Für das, was Du vorhast, kann man sagen: Linux = MacOS. Auch wenn das nicht ganz richtig ist. Und ja, auch unter den BSDs gibt es unterschiedliche Versionen. Selbst die tausende Linux-Distris sind alle etwas verschieden.

PS: Die Grundlagen der einzelnen Shells sind aber alle mehr oder weniger identisch (abhängig von der Versionszahl).
PPS: bash ist bash. Ob unter Linux, unter BSD (wo sie eher nicht benutzt wird), oder ob unter MacOS.