LPIC102/105.1 Die Shell-Umgebung anpassen und verwenden: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
(42 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
=Wichtigste Wissensgebiete= | |||
=Was | *Umgebungsvariable (etwa PATH) beim Anmelden oder Erzeugen einer neuen Shell setzen | ||
*Bash-Funktionen für häufig gebrauchte Kommandofolgen schreiben | |||
*Skelettverzeichnisse für neue Benutzerkonten pflegen | |||
*den Kommando-Suchpfad mit den richtigen Verzeichnissen setzen | |||
=Allgemeines= | |||
*Linux ist wohl das anpassungsfähigste Betriebssystem, das es gibt<br> | |||
*Das trifft auch auf die verschiedenen Linux-Shells zu, die Sie sehr leicht an Ihre eigenen Bedürfnisse anpassen können<br> | |||
*Alles, was Sie dazu brauchen, sind ein paar Befehle, Variablen und Konfigurationsdateien. Aber was ist überhaupt eine Shell? | |||
==Was is eine Shell== | |||
Ein textbasiertes Programm, dass als Schnittstelle zwischen Benutzer und Computer fungiert | |||
*Benutzer kann durch die Shell mit dem Kernel kommunizieren | *Benutzer kann durch die Shell mit dem Kernel kommunizieren | ||
* | *Der englische Begriff Kernel zu Deutsch Kern heißt und eine Shell eine Schale ist, wird wohl sehr schnell klar, wie diese beiden Fachbegriffe entstanden sind und wo eine solche Shell im System-Gefüge angesiedelt ist | ||
*Umgebung für die Ausführung von Skripten und Programmen | *Umgebung für die Ausführung von Skripten und Programmen | ||
* | *Man kann sie im weitesten Sinne auch noch als Programmierumgebung betrachten | ||
*Die am weitesten verbreitete Shell ist die "bash" (Bourne Again Shell) | *Die am weitesten verbreitete Shell ist die "bash" (Bourne Again Shell) | ||
*"sh" ist der Vorfahre der Bash | *"sh" ist der Vorfahre der Bash | ||
=Umgebungsvariablen und Shellvariablen= | |||
==Umgebungsvariablen und Shellvariablen== | |||
Die Unterschiede zwischen diesen beiden Variablentypen liegen einerseits drin. | |||
* | *Durch welche Konfigurationsdateien sie deklariert werden | ||
*Und demzufolge wann und durch welches Programm sie ausgewertet werden | |||
* | *Und andererseits in ihrem Wirkungsbereich: | ||
*Inhalte dieser Variablen werden | <big>'''Umgebungsvariablen:'''</big> | ||
* | *Gelten für alle Shells, die ein Benutzer verwendet | ||
*Die Inhalte dieser Variablen werden an Subshells vererbt. Das bedeutet, dass beim Aufruf einer Subshell ein automatischer Export der Variablen in diese Subshell stattfindet | |||
* | *Bei Umgebungsvariablen werden normalerweise Großbuchstaben verwendet | ||
* | <big>'''Shellvariablen:'''</big> | ||
* | *Müssen in jeder Subshell, die durch den Benutzer oder ein Skript gestartet wird, neu deklariert werden | ||
*Es findet standardmäßig keine Vererbung statt<br> | |||
*Für Shellvariablen verwendet man üblicherweise Kleinbuchstaben | |||
<big>'''Variablen:'''</big> | |||
*Die Bash unterscheidet zwischen Groß- und Kleinschreibweise | *Die Bash unterscheidet zwischen Groß- und Kleinschreibweise | ||
*Die Konventionen bezüglich der Schreibweisen bei Umgebungs- oder Shellvariablen werden von einigen Distributionen nicht eingehalten | *Die Konventionen bezüglich der Schreibweisen bei Umgebungs- oder Shellvariablen werden von einigen Distributionen nicht eingehalten | ||
<big>'''Variablen deklarieren:'''</big> | |||
Die Deklaration und Abfrage einer Shellvariable erfolgt recht einfach: | *Die Deklaration und Abfrage einer Shellvariable erfolgt recht einfach: | ||
$ a=5 | |||
$ b=6 | |||
$ let c=$a+$b | |||
$ echo $c=$a+$b | |||
11=5+6 | 11=5+6 | ||
* | *Die Variablen a und b mit den Werten 5 und 6 gefüllt | ||
* | *Dritte Zeile sorgt, dass Variable c das Ergebnis der Summe aus $a und $b wird | ||
* | *Letzte Zeile gibt die komplette Operation aus | ||
*Inhalte einer Variablen bleiben innerhalb einer Shell erhalten => die Variable kann wiederholt abgerufen oder verwendet werden | *Inhalte einer Variablen bleiben innerhalb einer Shell erhalten => die Variable kann wiederholt abgerufen oder verwendet werden | ||
$ echo $c | |||
11 | 11 | ||
*Der Bfehl <code>[[declare|declare]]</code> setzt Variablenwerte und deren Attribute. | |||
* | |||
* | <big>'''Variablen exportieren:'''</big> | ||
*Wird eine Subshell aufgerufen, steht diese Variable nicht mehr zur Verfügung, weil es sich nicht um eine Umgebungsvariable handelt | |||
*Es ist aber möglich, eine Variable für eine Subshell verfügbar zu machen, indem man diese exportiert | |||
*Ein solcher Export erfolgt nur an untergeordnete, jedoch nie an übergeordnete Shells | *Ein solcher Export erfolgt nur an untergeordnete, jedoch nie an übergeordnete Shells | ||
*Export bewirkt nicht, dass aus einer Shellvariable eine Umgebungsvariable wird | *Export bewirkt nicht, dass aus einer Shellvariable eine Umgebungsvariable wird | ||
Der Exportbefehl kann auf zwei Arten durchgeführt werden: | *Der Exportbefehl kann auf zwei Arten durchgeführt werden: | ||
$ export c | |||
$ sh | |||
sh-3.00# echo $c | sh-3.00# echo $c | ||
11 | 11 | ||
*In der ersten Variante wurde die Variable c aus dem vorangegangenen Beispiel exportiert und anschließend wurde mit sh eine neue Subshell geöffnet und dann mit echo $c auf dem Bildschirm ausgegeben | *In der ersten Variante wurde die Variable c aus dem vorangegangenen Beispiel exportiert und anschließend wurde mit sh eine neue Subshell geöffnet und dann mit echo $c auf dem Bildschirm ausgegeben | ||
Die zweite Methode sieht folgendermaßen aus: | *Die zweite Methode sieht folgendermaßen aus: | ||
$ export z=1000 | |||
$ sh | |||
sh-3.00# echo $z | sh-3.00# echo $z | ||
1000 | 1000 | ||
* | *Die Deklaration der Variablen und der Export sind mit einem Befehl durchgeführt worden | ||
* | *Mit echo $z wird demonstriert, dass der Inhalt der Variablen in der Ziel-Shell angekommen ist | ||
<big>'''Variablen einsehen:'''</big> | |||
* | *Mit dem Befehl <code>[[set|set]]</code> ohne Angabe von Parametern kann man nachsehen, welche Umgebungs- und Shellvariablen die aktuelle Shell gerade verwendet | ||
* | *Die Ausgabe an less weitergebn, damit Sie den Inhalt in Ruhe untersuchen können | ||
Eine gekürzte Ausgabe könnte Folgendes enthalten: | *Eine gekürzte Ausgabe könnte Folgendes enthalten: | ||
$ set | less | |||
a=5 | a=5 | ||
b=6 | b=6 | ||
Zeile 70: | Zeile 86: | ||
PATH=/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/usr/ | PATH=/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/usr/ | ||
X11R | X11R | ||
*Umgebungsvariablen können mit dem Kommando env eingesehen werden | *Umgebungsvariablen können mit dem Kommando <code>[[env|env]]</code> eingesehen werden | ||
* | *Es ist ratsam, die Ausgabe mit less zu betrachten | ||
<big>'''Variablen löschen:'''</big> | |||
*Variablen werden mit dem Befehl unset gelöscht | *Variablen werden mit dem Befehl <code>unset</code> gelöscht | ||
Um die Variablen aus den vorherigen Beispielen zu entfernen, geben Sie Folgendes ein: | *Um die Variablen aus den vorherigen Beispielen zu entfernen, geben Sie Folgendes ein: | ||
$ unset a | |||
$ unset b | |||
$ unset c | |||
oder einfacher: | |||
$ unset a b c | |||
Zur Überprüfung: | Zur Überprüfung: | ||
$ set | less | |||
BASH=/bin/bash | BASH=/bin/bash | ||
HISTSIZE=1000 | HISTSIZE=1000 | ||
Zeile 85: | Zeile 103: | ||
*Die Variablen a, b und c wurden gelöscht | *Die Variablen a, b und c wurden gelöscht | ||
*Alternativ ist eine Neuanmeldung möglich, denn es handelt sich um Shellvariablen, die bei Abmeldung nicht erhalten bleiben | *Alternativ ist eine Neuanmeldung möglich, denn es handelt sich um Shellvariablen, die bei Abmeldung nicht erhalten bleiben | ||
=Aliase und Funktionen= | |||
==Aliase und Funktionen== | |||
<big>'''Aliase:'''</big> | |||
*Für Befehle in Kombination mit bestimmten Parametern oder langen Befehlen die häufiger verwendet werden ist es empfehlenswert ein Alias anzulegen | *Für Befehle in Kombination mit bestimmten Parametern oder langen Befehlen die häufiger verwendet werden ist es empfehlenswert ein Alias anzulegen | ||
* | *Es ist möglich, mehrere Kommandos in einem einzigen Befehl zu kombinieren, indem Diese durch Semikolons ";" voneinander getrennt werden. Hier ein Beispiel: | ||
Hier ein Beispiel: | $ alias frei="free; df" | ||
$ frei | |||
total used free shared buff/cache available | total used free shared buff/cache available | ||
Mem: 3870884 1001952 1608764 124880 1260168 2512240 | Mem: 3870884 1001952 1608764 124880 1260168 2512240 | ||
Zeile 105: | Zeile 124: | ||
tmpfs 387088 12 387076 1% /run/user/1000 | tmpfs 387088 12 387076 1% /run/user/1000 | ||
*es wird mit einem einzigen Befehl die Festplatten- und Speicherbelegung überprüft, allerdings geht die Definition der Aliase bei einer Neuanmeldung am System verloren | *es wird mit einem einzigen Befehl die Festplatten- und Speicherbelegung überprüft, allerdings geht die Definition der Aliase bei einer Neuanmeldung am System verloren | ||
<big>'''Funktionen:'''</big> | |||
*Einschränkungen des Alias ist, dass der Übergabewerte ($1, $2 usw.) nur einmal ausgewertet werden kann, bei einer Funktion gibt es diese Einschränkung nicht | *Einschränkungen des Alias ist, dass der Übergabewerte ($1, $2 usw.) nur einmal ausgewertet werden kann, bei einer Funktion gibt es diese Einschränkung nicht | ||
* | *Eine Funktion ist ein Unterprogramm, das man für wiederkehrende Aufgaben verwenden kann | ||
* | *Kann in einer Shell sowohl von einem Benutzer als auch von einem Skript aufgerufen werden | ||
Der Aufbau einer Funktion sieht immer so aus: | *Der Aufbau einer Funktion sieht immer so aus: | ||
function Funktionsname() | $ function Funktionsname() | ||
{ | { | ||
Befehl 1 | Befehl 1 | ||
Zeile 118: | Zeile 138: | ||
} | } | ||
*"function" kann auch einfach weggelassen werden, weil die Bash an den beiden Klammern erkennt, dass es sich um eine Funktion handelt | *"function" kann auch einfach weggelassen werden, weil die Bash an den beiden Klammern erkennt, dass es sich um eine Funktion handelt | ||
Das Beispiel demonstriert, dass es mit einer Funktion sogar möglich ist, Rechenoperationen auszuführen: | *Das Beispiel demonstriert, dass es mit einer Funktion sogar möglich ist, Rechenoperationen auszuführen: | ||
function addiere () | |||
> { | > { | ||
> let summe=$1+$2 | > let summe=$1+$2 | ||
> echo -e "Die Summe ist $summe" | > echo -e "Die Summe ist $summe" | ||
> } | > } | ||
addiere 3 4 | |||
Die Summe ist 7 | Die Summe ist 7 | ||
*eine Funktion namens addiere wurde erstellt | *eine Funktion namens addiere wurde erstellt | ||
Zeile 131: | Zeile 151: | ||
*In der nächsten Zeile erfolgt die Ausgabe | *In der nächsten Zeile erfolgt die Ausgabe | ||
*Es ist auch möglich, eine Funktion in einer einzigen Zeile zu erstellen: | *Es ist auch möglich, eine Funktion in einer einzigen Zeile zu erstellen: | ||
$ function addiere { let summe=$1+$2; echo "Die Summe ist $summe"; } | |||
*die beiden Leerzeichen innerhalb der geschweiften Klammern sind notwendig und dienen nicht nur der Übersichtlichkeit | *die beiden Leerzeichen innerhalb der geschweiften Klammern sind notwendig und dienen nicht nur der Übersichtlichkeit | ||
<big>'''builtin:'''</big> | |||
*wird verwendet falls der Name der Bezeichnung für die eigenen Funktionen und Aliase vergeben ist | *wird verwendet falls der Name der Bezeichnung für die eigenen Funktionen und Aliase vergeben ist | ||
*wenn man eine Funktion oder einen Alias erstellen möchte, welches namentlich mit einem existierenden Kommando übereinstimmt, müsste man zum Aufruf des ursprünglichen Kommandos den kompletten Pfad zu diesem Kommando angeben | *wenn man eine Funktion oder einen Alias erstellen möchte, welches namentlich mit einem existierenden Kommando übereinstimmt, müsste man zum Aufruf des ursprünglichen Kommandos den kompletten Pfad zu diesem Kommando angeben | ||
*mit dem Kommando "builtin" kann z. B. für den echo-Befehl einen Alias einrichten: | *mit dem Kommando "builtin" kann z. B. für den echo-Befehl einen Alias einrichten: | ||
$ alias echo='echo -e' | |||
*wird echo im Originalzustand gebraucht, erfolgt der Aufruf durch: | *wird echo im Originalzustand gebraucht, erfolgt der Aufruf durch: | ||
$ builtin echo | |||
=Konfigurationsdateien der Bash= | =Konfigurationsdateien der Bash= | ||
*In den unterschiedlichen Linux-Distributionen kann es zu unterschiedlichen Konstrukten der Konfigurationsdateien kommen | *In den unterschiedlichen Linux-Distributionen kann es zu unterschiedlichen Konstrukten der Konfigurationsdateien kommen | ||
Zeile 171: | Zeile 193: | ||
==Konfiguration "on the fly" einlesen== | ==Konfiguration "on the fly" einlesen== | ||
*wurden neue Variablen in den Konfigurationsdateien deklariert, können diese sofort wirksam gemacht werden, indem man das Shell-interne Kommando source verwendet | *wurden neue Variablen in den Konfigurationsdateien deklariert, können diese sofort wirksam gemacht werden, indem man das Shell-interne Kommando source verwendet | ||
$ source /etc/profile | |||
=Skeleton-Verzeichnis /etc/skel= | =Skeleton-Verzeichnis /etc/skel= | ||
*eine Vorlage für das Heimatverzeichnis eines neuen Benutzers | *eine Vorlage für das Heimatverzeichnis eines neuen Benutzers | ||
Zeile 178: | Zeile 201: | ||
*die Berechtigungen werden für das Verzeichnis und dessen Inhalt auf den neuen Benutzer abgestimmt | *die Berechtigungen werden für das Verzeichnis und dessen Inhalt auf den neuen Benutzer abgestimmt | ||
*Speicherort ist normalerweise /etc/skel | *Speicherort ist normalerweise /etc/skel | ||
=Kontrollfragen= | |||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
''Mit welchem Befehl kann man nachsehen, welche Umgebungs- und Shellvariablen die aktuelle Shell gerade verwendet?'' | |||
<div class="mw-collapsible-content">'''set'''</div> | |||
</div> | |||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
''Mit welchem Befehl kann man einen alias löschen?'' | |||
<div class="mw-collapsible-content">'''unalias'''</div> | |||
</div> | |||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
''Frage 3'' | |||
<div class="mw-collapsible-content">'''Antwort'''</div> | |||
</div> | |||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
''Frage 4'' | |||
<div class="mw-collapsible-content">'''Antwort'''</div> | |||
</div> | |||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
''Frage 5'' | |||
<div class="mw-collapsible-content">'''Antwort'''</div> | |||
</div> | |||
[[Kategorie:Linux/LPIC/102]] |
Aktuelle Version vom 8. August 2024, 12:59 Uhr
Wichtigste Wissensgebiete
- Umgebungsvariable (etwa PATH) beim Anmelden oder Erzeugen einer neuen Shell setzen
- Bash-Funktionen für häufig gebrauchte Kommandofolgen schreiben
- Skelettverzeichnisse für neue Benutzerkonten pflegen
- den Kommando-Suchpfad mit den richtigen Verzeichnissen setzen
Allgemeines
- Linux ist wohl das anpassungsfähigste Betriebssystem, das es gibt
- Das trifft auch auf die verschiedenen Linux-Shells zu, die Sie sehr leicht an Ihre eigenen Bedürfnisse anpassen können
- Alles, was Sie dazu brauchen, sind ein paar Befehle, Variablen und Konfigurationsdateien. Aber was ist überhaupt eine Shell?
Was is eine Shell
Ein textbasiertes Programm, dass als Schnittstelle zwischen Benutzer und Computer fungiert
- Benutzer kann durch die Shell mit dem Kernel kommunizieren
- Der englische Begriff Kernel zu Deutsch Kern heißt und eine Shell eine Schale ist, wird wohl sehr schnell klar, wie diese beiden Fachbegriffe entstanden sind und wo eine solche Shell im System-Gefüge angesiedelt ist
- Umgebung für die Ausführung von Skripten und Programmen
- Man kann sie im weitesten Sinne auch noch als Programmierumgebung betrachten
- Die am weitesten verbreitete Shell ist die "bash" (Bourne Again Shell)
- "sh" ist der Vorfahre der Bash
Umgebungsvariablen und Shellvariablen
Die Unterschiede zwischen diesen beiden Variablentypen liegen einerseits drin.
- Durch welche Konfigurationsdateien sie deklariert werden
- Und demzufolge wann und durch welches Programm sie ausgewertet werden
- Und andererseits in ihrem Wirkungsbereich:
Umgebungsvariablen:
- Gelten für alle Shells, die ein Benutzer verwendet
- Die Inhalte dieser Variablen werden an Subshells vererbt. Das bedeutet, dass beim Aufruf einer Subshell ein automatischer Export der Variablen in diese Subshell stattfindet
- Bei Umgebungsvariablen werden normalerweise Großbuchstaben verwendet
Shellvariablen:
- Müssen in jeder Subshell, die durch den Benutzer oder ein Skript gestartet wird, neu deklariert werden
- Es findet standardmäßig keine Vererbung statt
- Für Shellvariablen verwendet man üblicherweise Kleinbuchstaben
Variablen:
- Die Bash unterscheidet zwischen Groß- und Kleinschreibweise
- Die Konventionen bezüglich der Schreibweisen bei Umgebungs- oder Shellvariablen werden von einigen Distributionen nicht eingehalten
Variablen deklarieren:
- Die Deklaration und Abfrage einer Shellvariable erfolgt recht einfach:
$ a=5 $ b=6 $ let c=$a+$b $ echo $c=$a+$b 11=5+6
- Die Variablen a und b mit den Werten 5 und 6 gefüllt
- Dritte Zeile sorgt, dass Variable c das Ergebnis der Summe aus $a und $b wird
- Letzte Zeile gibt die komplette Operation aus
- Inhalte einer Variablen bleiben innerhalb einer Shell erhalten => die Variable kann wiederholt abgerufen oder verwendet werden
$ echo $c 11
- Der Bfehl
declare
setzt Variablenwerte und deren Attribute.
Variablen exportieren:
- Wird eine Subshell aufgerufen, steht diese Variable nicht mehr zur Verfügung, weil es sich nicht um eine Umgebungsvariable handelt
- Es ist aber möglich, eine Variable für eine Subshell verfügbar zu machen, indem man diese exportiert
- Ein solcher Export erfolgt nur an untergeordnete, jedoch nie an übergeordnete Shells
- Export bewirkt nicht, dass aus einer Shellvariable eine Umgebungsvariable wird
- Der Exportbefehl kann auf zwei Arten durchgeführt werden:
$ export c $ sh sh-3.00# echo $c 11
- In der ersten Variante wurde die Variable c aus dem vorangegangenen Beispiel exportiert und anschließend wurde mit sh eine neue Subshell geöffnet und dann mit echo $c auf dem Bildschirm ausgegeben
- Die zweite Methode sieht folgendermaßen aus:
$ export z=1000 $ sh sh-3.00# echo $z 1000
- Die Deklaration der Variablen und der Export sind mit einem Befehl durchgeführt worden
- Mit echo $z wird demonstriert, dass der Inhalt der Variablen in der Ziel-Shell angekommen ist
Variablen einsehen:
- Mit dem Befehl
set
ohne Angabe von Parametern kann man nachsehen, welche Umgebungs- und Shellvariablen die aktuelle Shell gerade verwendet - Die Ausgabe an less weitergebn, damit Sie den Inhalt in Ruhe untersuchen können
- Eine gekürzte Ausgabe könnte Folgendes enthalten:
$ set | less a=5 b=6 BASH=/bin/bash c=11 HISTSIZE=1000 HOME=/root HOSTNAME=archangel MANPATH=/usr/share/man:/usr/local/man:/usr/X11R6/man:/opt/gnome/share/man PAGER=less PATH=/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/usr/ X11R
- Umgebungsvariablen können mit dem Kommando
env
eingesehen werden - Es ist ratsam, die Ausgabe mit less zu betrachten
Variablen löschen:
- Variablen werden mit dem Befehl
unset
gelöscht - Um die Variablen aus den vorherigen Beispielen zu entfernen, geben Sie Folgendes ein:
$ unset a $ unset b $ unset c
oder einfacher:
$ unset a b c
Zur Überprüfung:
$ set | less BASH=/bin/bash HISTSIZE=1000 ...
- Die Variablen a, b und c wurden gelöscht
- Alternativ ist eine Neuanmeldung möglich, denn es handelt sich um Shellvariablen, die bei Abmeldung nicht erhalten bleiben
Aliase und Funktionen
Aliase:
- Für Befehle in Kombination mit bestimmten Parametern oder langen Befehlen die häufiger verwendet werden ist es empfehlenswert ein Alias anzulegen
- Es ist möglich, mehrere Kommandos in einem einzigen Befehl zu kombinieren, indem Diese durch Semikolons ";" voneinander getrennt werden. Hier ein Beispiel:
$ alias frei="free; df" $ frei total used free shared buff/cache available Mem: 3870884 1001952 1608764 124880 1260168 2512240 Swap: 7811068 0 7811068 Dateisystem 1K-Blöcke Benutzt Verfügbar Verw% Eingehängt auf udev 1924160 0 1924160 0% /dev tmpfs 387092 5896 381196 2% /run /dev/sda2 38186548 7072220 29144820 20% / tmpfs 1935440 11096 1924344 1% /dev/shm tmpfs 5120 4 5116 1% /run/lock tmpfs 1935440 0 1935440 0% /sys/fs/cgroup tmpfs 387088 0 387088 0% /run/user/113 tmpfs 387088 12 387076 1% /run/user/1000
- es wird mit einem einzigen Befehl die Festplatten- und Speicherbelegung überprüft, allerdings geht die Definition der Aliase bei einer Neuanmeldung am System verloren
Funktionen:
- Einschränkungen des Alias ist, dass der Übergabewerte ($1, $2 usw.) nur einmal ausgewertet werden kann, bei einer Funktion gibt es diese Einschränkung nicht
- Eine Funktion ist ein Unterprogramm, das man für wiederkehrende Aufgaben verwenden kann
- Kann in einer Shell sowohl von einem Benutzer als auch von einem Skript aufgerufen werden
- Der Aufbau einer Funktion sieht immer so aus:
$ function Funktionsname() { Befehl 1 Befehl 2 ... Befehl n }
- "function" kann auch einfach weggelassen werden, weil die Bash an den beiden Klammern erkennt, dass es sich um eine Funktion handelt
- Das Beispiel demonstriert, dass es mit einer Funktion sogar möglich ist, Rechenoperationen auszuführen:
function addiere ()
> { > let summe=$1+$2 > echo -e "Die Summe ist $summe" > } addiere 3 4 Die Summe ist 7
- eine Funktion namens addiere wurde erstellt
- Die geschweiften Klammern sorgen dafür, dass diese mehrzeilige Anweisung als ein einziger Befehl interpretiert wird
- "let summe=$1+$2" sorgt dafür, dass der Variable "summe" die Summe aus den beiden Übergabevariablen $1 und $2 übergeben wird
- In der nächsten Zeile erfolgt die Ausgabe
- Es ist auch möglich, eine Funktion in einer einzigen Zeile zu erstellen:
$ function addiere { let summe=$1+$2; echo "Die Summe ist $summe"; }
- die beiden Leerzeichen innerhalb der geschweiften Klammern sind notwendig und dienen nicht nur der Übersichtlichkeit
builtin:
- wird verwendet falls der Name der Bezeichnung für die eigenen Funktionen und Aliase vergeben ist
- wenn man eine Funktion oder einen Alias erstellen möchte, welches namentlich mit einem existierenden Kommando übereinstimmt, müsste man zum Aufruf des ursprünglichen Kommandos den kompletten Pfad zu diesem Kommando angeben
- mit dem Kommando "builtin" kann z. B. für den echo-Befehl einen Alias einrichten:
$ alias echo='echo -e'
- wird echo im Originalzustand gebraucht, erfolgt der Aufruf durch:
$ builtin echo
Konfigurationsdateien der Bash
- In den unterschiedlichen Linux-Distributionen kann es zu unterschiedlichen Konstrukten der Konfigurationsdateien kommen
- Konfigurationsdateien, die für alle Anwender Gültigkeit haben, befinden sich im Verzeichnis /etc und beginnen niemals mit einem Punkt
- individuelle Konfigurationsdateien für den jeweiligen User befinden sich im entsprechenden Heimatverzeichnis und beginnen immer mit einem Punkt
Systemweite Konfigurationsdateien
Die systemweiten Konfigurationsdateien sind für jeden Benutzer gültig, der sich am System anmeldet. Die beiden gängigsten sind folgende:
- /etc/profile ist die erste Konfigurationsdatei, die bei der Anmeldung (Login- Shell) eines Benutzers eingelesen wird
- enthält erste Umgebungsvariablen und die erste PATH-Anweisun
- Änderungen in dieser Datei erfordern eine neue Anmeldung des Benutzers
- /etc/bash.bashrc enthält systemweite Einstellungen, Aliase und Funktionen
- wird beim Start jeder Shell neu eingelesen und erfordert deshalb nach Änderung keine Neuanmeldung des Benutzers
Konfigurationsdateien für den Benutzer
Die folgenden Dateien befinden sich im Heimatverzeichnis eines jeden Benutzers und dürfen auch durch seinen Besitzer modifiziert werden:
- ~/.bash_profile wird (falls vorhanden) nur bei einer Neuanmeldung eingelesen und sofort nach /etc/profile ausgeführt
- beinhaltet zusätzliche Pfadanweisungen, den zu verwendenden Standardeditor und benutzerspezifische Umgebungsvariablen
- ~/.bash_login ist eine Alternative zu .bash_profile
- wird auch nur dann abgearbeitet, wenn die Datei .bash_profile nicht existiert
- diese Datei wird nur während der Anmeldung verwendet
- Inhalt und der Verwendungszweck entsprechen der .bash_profile
- ~/.profile ist die ursprüngliche Konfigurationsdatei der Bash
- wird nur während der Anmeldung (für die Login-Shell) eingelesen, aber nur wenn weder eine .bash_profile- noch eine .bash_login-Datei im Verzeichnis des Benutzers existieren
- Inhalt und Verwendungszweck entsprechen der .bash_profile und .bash_login
- ~/.bashrc ist die andere, ursprüngliche Konfigurationsdatei der Bash
- wird in jedem Fall eingelesen, und zwar auch beim Aufruf einer neuen Shell
- nach Änderungen in dieser Datei ist keine Neuanmeldung des Benutzers erforderlich
- beinhaltet im Wesentlichen Aliase und Funktionen.
- ~/.bash_logout ist eine optionale Datei
- wird ausgeführt wenn der Benutzer sich abmeldet
Konfiguration "on the fly" einlesen
- wurden neue Variablen in den Konfigurationsdateien deklariert, können diese sofort wirksam gemacht werden, indem man das Shell-interne Kommando source verwendet
$ source /etc/profile
Skeleton-Verzeichnis /etc/skel
- eine Vorlage für das Heimatverzeichnis eines neuen Benutzers
- beim Erstellen eines neuen Benutzerkontos mit useradd -m "username" wird, ein Verzeichnis namens /home/"username" erstellt
- der Inhalt des Skeleton-Verzeichnisses wird dann in das Verzeichnis /home/"username" kopiert
- die Berechtigungen werden für das Verzeichnis und dessen Inhalt auf den neuen Benutzer abgestimmt
- Speicherort ist normalerweise /etc/skel
Kontrollfragen
Mit welchem Befehl kann man nachsehen, welche Umgebungs- und Shellvariablen die aktuelle Shell gerade verwendet?
Mit welchem Befehl kann man einen alias löschen?
Frage 3
Frage 4
Frage 5