UnixTools01 06: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
= Wildcards = |
= Wildcards = |
||
Wildcards haben etwas mit den Argumenten zu tun, die wir für Kommandos angeben können. Wildcards werden von der Shell erkannt, analysiert und duch "passende" Argumente ersetzt. |
|||
⚫ | |||
= Argumente - Argumente von Shell-Kommandos = |
|||
⚫ | |||
$ ls file1 file2 file3 |
$ ls file1 file2 file3 |
||
Im obigen Beispiel hat das Kommando '''ls''' drei Argumente, nämlich '''file1''', '''file2''' und '''file3'''. |
|||
Normalerweise werden die Argumente von der Shell genau so an das aufgerufene Programm (hier '''ls''') übergeben, wie wir sie hingeschrieben haben. |
|||
Aber es geht auch anders. Manchmal benötigen wir spezielle Notationen um die Argumente hinzuschreiben, damit die Shell richtig versteht, was wir meinen. |
|||
⚫ | |||
⚫ | |||
In diesem Beispiel hat das Proggramm '''ls''' wieder drei Argumente, von denen die letzten beiden in Anführungsreichen gesetzt wurden. Im ersten Fall, weil das Argument Leerzeichen enthält (ohne Anführungszeichen hätte die Shell gedacht, dass es sich um 2 Argumente handeln würde. Im zeiten Fall waren die Anführungszeichen nötig, weil das Argument SOnderzeichen enthält, die sonst von der Shell interpretiert (und missverstanden) worden wären. |
|||
$ ls 'Hello World' '()-!-()' hallo |
$ ls 'Hello World' '()-!-()' hallo |
||
Im obigen Beispiel hat das Proggramm '''ls''' wieder drei Argumente, von denen die ersten beiden in Anführungsreichen gesetzt wurden. Täten wir das nicht, würde die Shell unsere Eingabe missverstehen. |
|||
Wichtig: Wenn das Programm (hier '''ls''') die Argumente übergeben bekommt, dann sind die Anführungszeichen dort nicht mehr anthalten. Sie werden nur benötigt, damit die Shell richtig versteht, was Sie meinen. Denn ohne die Anführungszeichen würde die Shell Sie falsch verstehen. Im Prinzip können Sie alle ihre Argumente immer in Anführungszeichen setzen, die Shell würde das nicht stören. Aber es ist nicht nötig, wenn es zu keinen Missverständnissen kommen kann. |
|||
Im ersten Fall, weil das Argument Leerzeichen enthält. 'Hello World' ist ein Argument. Ohne Anführungszeichen hätte die Shell gedacht, dass es sich um 2 Argumente handeln würde. |
|||
Im zeiten Fall waren die Anführungszeichen nötig, weil das Argument Sonderzeichen enthält, die sonst von der Shell interpretiert (und missverstanden) worden wären. |
|||
Das dritte Argument muss nicht in Anführungszeichen geschrieben werden, weil es daran nichts falsch zu erstehen gibt. Im Prinzip können wir alle Argumente immer in Anführungszeichen setzen, die Shell würde das nicht stören. Aber es meist nicht nötig, und dann sparen wir uns die Tipparbeit. |
|||
Wichtig: Wenn die Shell das Programm (hier '''ls''') startet und ihm die Argumente übergibt, dann sind die Anführungszeichen dort nicht mehr anthalten. Die Anführungszeichen werden nur bei der Notation des Arguments (in der Kommunikatio mit der Shell) benötigt. Die Shel entfernt sie automatisch. |
|||
Eine weitere Sonder-Notation für Argumente sind '''WildCards'''. Sie werden von der Shell nicht an das Programm übergeben, so wie wir sie hingeschrieben haben, sondern WildCards werden von der Shell durch "richtige Argumente" ersetzt, und diese werden dann dem aufgerufenen Programm übergeben. Das heisst, dass aufgerufene Programm sieht die WildCards nicht. Die Shell sieht die WildCards, ersetzt sie durch ein oder mehrere Argumente und ruft das Programm dann mit diesen Argumenten auf. |
|||
= echo = |
|||
Bevor |
Bevor wiLernen wir zunächst das Kommmando echo kennen. |
||
Das Kommando '''echo''' sieht sich alle Argumente an, |
Das Kommando '''echo''' sieht sich alle Argumente an, und gibt sie sofort wieder aus, alle in einer Zeile. Daher der Name '''echo'''. |
||
Hier wird das Kommando '''echo''' mit genau einem Argument aufgerufen |
Hier wird das Kommando '''echo''' mit genau einem Argument aufgerufen |
||
Line 21: | Line 35: | ||
Eins Zwei Drei |
Eins Zwei Drei |
||
Wie wir sehen, gibt '''echo''' alle Argumente aus. |
Wie wir sehen, gibt '''echo''' alle Argumente aus. Genausoviele Argumente, wie ihm übergeben wirden, und jedes für sich, ohne Veränderung. |
||
Falls Sie sich bei einem komplizierten Kommando also einmal nicht sicher sind, was die Shell daraus macht, dann schrieben Sie '''echo''' davor und sie sehen, was die Shell aus Ihrer Eingabe machen würde. |
|||
Wollen wir sehen, durch was ie Shell unsere Wildcards ersetzt hat, knnen wir dafür das Kommando '''echo benutzen''' |
|||
'''Beispiel''' |
'''Beispiel''' |
Revision as of 11:24, 26 November 2024
Wildcards
Wildcards haben etwas mit den Argumenten zu tun, die wir für Kommandos angeben können. Wildcards werden von der Shell erkannt, analysiert und duch "passende" Argumente ersetzt.
Argumente - Argumente von Shell-Kommandos
Viele Shell Kommandos besitzen Argumente, die wir, durch Leerzeichen voneinander getrennt, hinter das Kommando schreiben.
$ ls file1 file2 file3
Im obigen Beispiel hat das Kommando ls drei Argumente, nämlich file1, file2 und file3.
Normalerweise werden die Argumente von der Shell genau so an das aufgerufene Programm (hier ls) übergeben, wie wir sie hingeschrieben haben. Aber es geht auch anders. Manchmal benötigen wir spezielle Notationen um die Argumente hinzuschreiben, damit die Shell richtig versteht, was wir meinen.
Enthält das Argument Leerzeichen, oder andere Sonderzeichen (das sind Zeichen mit einer besonderen Bedeutung), dann müssen wie diese Argumente mit oder "" einschließen (auf den Unterschied zwischen und "" werden wir später zu sprechen kommen).
$ ls 'Hello World' '()-!-()' hallo
Im obigen Beispiel hat das Proggramm ls wieder drei Argumente, von denen die ersten beiden in Anführungsreichen gesetzt wurden. Täten wir das nicht, würde die Shell unsere Eingabe missverstehen. Im ersten Fall, weil das Argument Leerzeichen enthält. 'Hello World' ist ein Argument. Ohne Anführungszeichen hätte die Shell gedacht, dass es sich um 2 Argumente handeln würde. Im zeiten Fall waren die Anführungszeichen nötig, weil das Argument Sonderzeichen enthält, die sonst von der Shell interpretiert (und missverstanden) worden wären. Das dritte Argument muss nicht in Anführungszeichen geschrieben werden, weil es daran nichts falsch zu erstehen gibt. Im Prinzip können wir alle Argumente immer in Anführungszeichen setzen, die Shell würde das nicht stören. Aber es meist nicht nötig, und dann sparen wir uns die Tipparbeit.
Wichtig: Wenn die Shell das Programm (hier ls) startet und ihm die Argumente übergibt, dann sind die Anführungszeichen dort nicht mehr anthalten. Die Anführungszeichen werden nur bei der Notation des Arguments (in der Kommunikatio mit der Shell) benötigt. Die Shel entfernt sie automatisch.
Eine weitere Sonder-Notation für Argumente sind WildCards. Sie werden von der Shell nicht an das Programm übergeben, so wie wir sie hingeschrieben haben, sondern WildCards werden von der Shell durch "richtige Argumente" ersetzt, und diese werden dann dem aufgerufenen Programm übergeben. Das heisst, dass aufgerufene Programm sieht die WildCards nicht. Die Shell sieht die WildCards, ersetzt sie durch ein oder mehrere Argumente und ruft das Programm dann mit diesen Argumenten auf.
echo
Bevor wiLernen wir zunächst das Kommmando echo kennen. Das Kommando echo sieht sich alle Argumente an, und gibt sie sofort wieder aus, alle in einer Zeile. Daher der Name echo.
Hier wird das Kommando echo mit genau einem Argument aufgerufen
$ echo Eins Eins
Hier wird das Kommando echo mit 3 Argumenten aufgerufen
$ echo Eins Zwei Drei Eins Zwei Drei
Wie wir sehen, gibt echo alle Argumente aus. Genausoviele Argumente, wie ihm übergeben wirden, und jedes für sich, ohne Veränderung. Falls Sie sich bei einem komplizierten Kommando also einmal nicht sicher sind, was die Shell daraus macht, dann schrieben Sie echo davor und sie sehen, was die Shell aus Ihrer Eingabe machen würde.
Beispiel
$ ls -l foo.txt bar.txt file.jpg picture.jpg
$ echo *.txt foo.txt bar.txt
Das Programm echo bekommt die Wildcard *.txt nie zu sehen. Stattdessen ersetzt es die Shell durch (in diesem Fall 2) Dateinamen, die auf dieses Muster passen. Würde nur ein Dateiname auf das Muster passern, würde die Shell die Wildcard nur durch ein Argument ersetzen. Würden 1000 Dateinamen auf das Muster ersetzen, würde die Shell die Wildcard durch diese 1000 Argumente ersetzen. Für das Programm sieht es so aus, als ob wir die (in diesem Falll 1000) Atrgumente selbst in die Kommandozeile eingetragen hätten.