Zum Inhalt springen

Linux/Bash/Aliase und Funktionen: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:


== Beschreibung ==
== Beschreibung ==
=== Aliase und Funktionen ===
Wenn Sie Befehle in Kombination mit bestimmten Parametern immer wieder verwenden, ist es empfehlenswert, einen Alias zu definieren.
* Das ist auch hilfreich, wenn ein Befehl in sich sehr lang ist.
* Ein Beispiel: Wenn man oft Tarballs aus dem Internet herunterladen und entpacken muss, benötigt man immer wieder das Kommando tar -xvzf <archivname.tgz>.
* Es wäre doch viel einfacher, nur ein einziges oder zumindest wenige Zeichen hierfür zu verwenden.
Es lohnt sich also, einen Alias anzulegen:
<syntaxhighlight lang="bash" highlight="1" line copy>
alias tx="tar -xvzf" .
</syntaxhighlight>
Jetzt kann ein Tarball einfach mit dem Kommando tx <archivname.tgz> extrahiert
und ausgepackt werden.
* Es ist auch möglich, mehrere Kommandos in einem einzigen Alias zu kombinieren.
* In einem solchen Fall müssen diese Kommandos durch Semikolons voneinander getrennt werden
Hier ein Beispiel:
<syntaxhighlight lang="bash" highlight="1" line copy>
user@tom:~$ alias frei="free; df"
user@tom:~$ 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
</syntaxhighlight>
Auf diese Art wird mit einem einzigen Befehl die Festplatten- und Speicherbelegung überprüft.
* Die Definition der Aliase geht bei einer Neuanmeldung am System verloren
Funktionen Eine der unangenehmsten Einschränkungen, die ein Alias mit sich bringt, ist die Tatsache, dass Übergabewerte ($1, $2 und weitere) nur einmal ausgewertet werden können.
* Bei einer Funktion gibt es diese Einschränkung nicht.
* Der Begriff Funktion entstammt der Programmierung, und eigentlich handelt es sich um ein Unterprogramm, das man für wiederkehrende Aufgaben verwenden kann.
* Eine Funktion in einer Shell kann sowohl von einem Benutzer als auch von einem Skript aufgerufen werden.
Der Aufbau einer Funktion sieht immer so aus:
<syntaxhighlight lang="bash" highlight="1" line copy>
function Funktionsname()
{
Befehl 1
Befehl 2
Befehl n
}
</syntaxhighlight>
Der Befehl function kann auch einfach weggelassen werden, weil die Bash an den beiden Klammern erkennt, dass es sich um eine Funktion handelt.
* Wenn Sie den Befehl function dennoch verwenden, können Sie alternativ die Klammern direkt hinter dem Namen der Funktion weglassen.
* Es soll hier aber im Folgenden die korrekte Syntax angewandt werden.
Das Beispiel demonstriert, dass es mit einer Funktion sogar möglich ist, Rechenoperationen auszuführen:
<syntaxhighlight lang="bash" highlight="1" line copy>
archangel:/ # function addiere ()
> {
> let summe=$1+$2
> echo -e "Die Summe ist $summe"
> }
archangel:/ # addiere 3 4
Die Summe ist 7
</syntaxhighlight>
Es wurde eine Funktion namens addiere erstellt.
* Die geschweiften Klammern sorgen dafür, dass diese mehrzeilige Anweisung als ein einziger Befehl interpretiert wird.
* Die Zeile let summe=$1+$2 sorgt dafür, dass der Variablen 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:
<syntaxhighlight lang="bash" highlight="1" line copy>
archangel:/ # function addiere { let summe=$1+$2; echo "Die Summe ist $summe"; }
</syntaxhighlight>
Diese Methode wird jedoch von den meisten Benutzern als unübersichtlich empfunden.
* Die beiden Leerzeichen innerhalb der geschweiften Klammern sind übrigens notwendig und dienen nicht nur der Übersichtlichkeit.
* Es gibt eine alternative Syntax, um eine Funktion zu erstellen.
Die folgende Kommandozeile hat dasselbe Ergebnis zur Folge wie die vorangegangene:
<syntaxhighlight lang="bash" highlight="1" line copy>
archangel:/ # addiere () { let summe=$1+$2; echo "Die Summe ist $summe"; }
</syntaxhighlight>
Da hier das Schlüsselwort function noch nicht einmal auftaucht, ist für einen Einsteiger kaum noch zu erkennen, um was es sich hier eigentlich handelt.
* Der folgende Befehl enthält eine so genannte forkbomb, die auf einer Funktion basiert.
* Versuchen Sie doch einmal zu verstehen, wie diese funktioniert.
Sie wird übrigens Ihren Computer zum Absturz bringen, wenn Sie den Befehl abtippen
<syntaxhighlight lang="bash" highlight="1" line copy>
archangel:/ # :(){ :|:& };:
</syntaxhighlight>


== Installation ==
== Installation ==
Zeile 74: Zeile 168:
==== Projekt ====
==== Projekt ====
==== Weblinks ====
==== Weblinks ====
<!--
<!--
{{DEFAULTSORT:new}}
{{DEFAULTSORT:new}}
Zeile 80: Zeile 173:
-->
-->


[[Kategorie:new]]
[[Kategorie:Bash/Scripting]]


</noinclude>
</noinclude>
= TMP =
== Aliase und Funktionen ==
Wenn Sie Befehle in Kombination mit bestimmten Parametern immer wieder verwenden, ist es empfehlenswert, einen Alias zu definieren.
* Das ist auch hilfreich, wenn ein Befehl in sich sehr lang ist.
* Ein Beispiel: Wenn man oft Tarballs aus dem Internet herunterladen und entpacken muss, benötigt man immer wieder das Kommando tar -xvzf <archivname.tgz>.
* Es wäre doch viel einfacher, nur ein einziges oder zumindest wenige Zeichen hierfür zu verwenden.
* Es lohnt sich also, einen Alias anzulegen: # alias tx="tar -xvzf".
* Jetzt kann ein Tarball einfach mit dem Kommando tx <archivname.tgz> extrahiert
und ausgepackt werden.
* Es ist auch möglich, mehrere Kommandos in einem einzigen Alias zu kombinieren.
* In einem solchen Fall müssen diese Kommandos durch Semikolons voneinander getrennt werden
Hier ein Beispiel:
user@tom:~$ alias frei="free; df"
user@tom:~$ 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
Auf diese Art wird mit einem einzigen Befehl die Festplatten- und Speicherbelegung überprüft.
* Die Definition der Aliase geht bei einer Neuanmeldung am System verloren
Funktionen Eine der unangenehmsten Einschränkungen, die ein Alias mit sich bringt, ist die Tatsache, dass Übergabewerte ($1, $2 und weitere) nur einmal ausgewertet werden können.
* Bei einer Funktion gibt es diese Einschränkung nicht.
* Der Begriff Funktion entstammt der Programmierung, und eigentlich handelt es sich um ein Unterprogramm, das man für wiederkehrende Aufgaben verwenden kann.
* Eine Funktion in einer Shell kann 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
}
Der Befehl function kann auch einfach weggelassen werden, weil die Bash an den beiden Klammern erkennt, dass es sich um eine Funktion handelt.
* Wenn Sie den Befehl function dennoch verwenden, können Sie alternativ die Klammern direkt hinter dem Namen der Funktion weglassen.
* Es soll hier aber im Folgenden die korrekte Syntax angewandt werden.
* Das Beispiel demonstriert, dass es mit einer Funktion sogar möglich ist, Rechenoperationen auszuführen:
archangel:/ # function addiere ()
> {
> let summe=$1+$2
> echo -e "Die Summe ist $summe"
> }
archangel:/ # addiere 3 4
Die Summe ist 7
Es wurde eine Funktion namens addiere erstellt.
* Die geschweiften Klammern sorgen dafür, dass diese mehrzeilige Anweisung als ein einziger Befehl interpretiert wird.
* Die Zeile let summe=$1+$2 sorgt dafür, dass der Variablen 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:
archangel:/ # function addiere { let summe=$1+$2; echo "Die Summe ist $summe"; }
Diese Methode wird jedoch von den meisten Benutzern als unübersichtlich empfunden.
* Die beiden Leerzeichen innerhalb der geschweiften Klammern sind übrigens notwendig und dienen nicht nur der Übersichtlichkeit.
* Es gibt eine alternative Syntax, um eine Funktion zu erstellen.
* Die folgende Kommandozeile hat dasselbe Ergebnis zur Folge wie die vorangegangene:
archangel:/ # addiere () { let summe=$1+$2; echo "Die Summe ist $summe"; }
Da hier das Schlüsselwort function noch nicht einmal auftaucht, ist für einen Einsteiger kaum noch zu erkennen, um was es sich hier eigentlich handelt.
* Der folgende Befehl enthält eine so genannte forkbomb, die auf einer Funktion basiert.
* Versuchen Sie doch einmal zu verstehen, wie diese funktioniert.
* Sie wird übrigens Ihren Computer zum Absturz bringen, wenn Sie den Befehl abtippen
archangel:/ # :(){ :|:& };:
===builtin===
Vor der Vergabe der Bezeichnung für Ihre Funktionen und Aliase überprüfen, ob es nicht schon ein Kommando mit diesem Namen gibt.
* Wenn Sie dennoch eine Funktion oder einen Alias erstellen müssen, der bzw.&nbsp;die namentlich mit einem existierenden Kommando übereinstimmt, müssten Sie ansonsten zum Aufruf des ursprünglichen Kommandos den kompletten Pfad zu diesem Kommando angeben.
* Bei einer Übereinstimmung des Namens mit einem Shellinternen Befehl verwenden Sie vorab das Kommando builtin.
* Wenn Sie beispielsweise für den echo-Befehl standardmäßig die Maskierung durch die Verwendung eines Backslashs aktivieren wollen, können Sie diesen Alias einrichten: archangel:/ # alias echo='echo -e' Benötigen Sie echo dann ausnahmsweise doch im Originalzustand, erfolgt der Aufruf durch: archangel:/ # 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.
* Die individuellen Konfigurationsdateien für den jeweiligen User befinden sich im entsprechenden Heimatverzeichnis und beginnen immer mit einem Punkt.
* Eine Datei /etc/.bashrc kommt als Konfigurationsdatei genauso wenig in Frage wie eine Datei mit der Bezeichnung /home/udo/profiles
===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.
* Sie enthält erste Umgebungsvariablen und die erste PATH-Anweisung. Änderungen in dieser Datei erfordern eine neue Anmeldung des Benutzers
* /etc/bash.bashrc enthält systemweite Einstellungen, Aliase und Funktionen.
* Diese Datei 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.
* Damit weniger versierte Benutzer nicht durch diese Dateien irritiert werden, sind diese mit einem Punkt vor einer Auflistung mit Dateibrowsern geschützt worden.
* Die folgende Auflistung entspricht auch der Ausführungsreihenfolge (vorausgesetzt, die Dateien sind in der jeweiligen Distribution überhaupt vorhanden)
* ~/.bash_profile wird (falls vorhanden) nur bei einer Neuanmeldung eingelesen und sofort nach /etc/profile ausgeführt.
* Sie beinhaltet zusätzliche Pfadanweisungen (beispielsweise das Heimatverzeichnis), den zu verwendenden Standardeditor und benutzerspezifische Umgebungsvariablen
* ~/.bash_login ist eine Alternative zu .bash_profile und wird auch nur dann abgearbeitet, wenn die Datei .bash_profile nicht existiert.
* Auch diese Datei wird nur während der Anmeldung verwendet.
* Der Inhalt und der Verwendungszweck entsprechen der .bash_profile
* ~/.profile ist die ursprüngliche Konfigurationsdatei der Bash.
* Sie wird nur während der Anmeldung (für die Login-Shell) eingelesen und das auch nur dann, 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.
* Sie wird in jedem Fall eingelesen, und zwar auch beim Aufruf einer neuen Shell.
* Nach Änderungen in dieser Datei ist entsprechend keine Neuanmeldung des Benutzers erforderlich.
* Sie beinhaltet im Wesentlichen Aliase und Funktionen
* ~/.bash_logout ist eine optionale Datei, die ausgeführt wird, wenn der Benutzer sich abmeldet.
* Sie könnte zum Beispiel den Monitor löschen
===Konfiguration on the fly einlesen===
Haben Sie in einer der Konfigurationsdateien beispielsweise neue Variablen deklariert, können Sie diese sofort wirksam werden lassen, indem Sie das Shell-interne Kommando source verwenden.
* Beispiel: root@archangel:~# source /etc/profile Wenn Sie Ihre Tastatur schonen wollen, lässt sich das Kommando source auf einen Punkt verkürzen: root@archangel:~# . /etc/profile
===Das Skeleton-Verzeichnis /etc/skel===
Das Skeleton-Verzeichnis kann als eine Vorlage für das Heimatverzeichnis eines neuen Benutzers betrachtet werden.
* Beim Erstellen eines neuen Benutzerkontos mit useradd -m willi wird, die richtigen Standardeinstellungen vorausgesetzt, ein Verzeichnis namens /home/willi erstellt.
* Der Inhalt des Skeleton-Verzeichnisses wird dann in das Verzeichnis /home/willi kopiert.
* Abschließend werden die Berechtigungen für das Verzeichnis und dessen Inhalt auf den neuen Benutzer abgestimmt.
* Der Speicherort für Skeleton ist normalerweise /etc/skel.
* Auch hier kann es zu Unterschieden in den Distributionen kommen
[[Kategorie:Bash/Scripting]]

Aktuelle Version vom 31. Januar 2026, 19:24 Uhr

Linux/Bash/Aliase und Funktionen - Beschreibung

Beschreibung

Aliase und Funktionen

Wenn Sie Befehle in Kombination mit bestimmten Parametern immer wieder verwenden, ist es empfehlenswert, einen Alias zu definieren.

  • Das ist auch hilfreich, wenn ein Befehl in sich sehr lang ist.
  • Ein Beispiel: Wenn man oft Tarballs aus dem Internet herunterladen und entpacken muss, benötigt man immer wieder das Kommando tar -xvzf <archivname.tgz>.
  • Es wäre doch viel einfacher, nur ein einziges oder zumindest wenige Zeichen hierfür zu verwenden.

Es lohnt sich also, einen Alias anzulegen:

alias tx="tar -xvzf" .

Jetzt kann ein Tarball einfach mit dem Kommando tx <archivname.tgz> extrahiert und ausgepackt werden.

  • Es ist auch möglich, mehrere Kommandos in einem einzigen Alias zu kombinieren.
  • In einem solchen Fall müssen diese Kommandos durch Semikolons voneinander getrennt werden

Hier ein Beispiel:

 user@tom:~$ alias frei="free; df"
 user@tom:~$ 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

Auf diese Art wird mit einem einzigen Befehl die Festplatten- und Speicherbelegung überprüft.

  • Die Definition der Aliase geht bei einer Neuanmeldung am System verloren

Funktionen Eine der unangenehmsten Einschränkungen, die ein Alias mit sich bringt, ist die Tatsache, dass Übergabewerte ($1, $2 und weitere) nur einmal ausgewertet werden können.

  • Bei einer Funktion gibt es diese Einschränkung nicht.
  • Der Begriff Funktion entstammt der Programmierung, und eigentlich handelt es sich um ein Unterprogramm, das man für wiederkehrende Aufgaben verwenden kann.
  • Eine Funktion in einer Shell kann 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
 }

Der Befehl function kann auch einfach weggelassen werden, weil die Bash an den beiden Klammern erkennt, dass es sich um eine Funktion handelt.

  • Wenn Sie den Befehl function dennoch verwenden, können Sie alternativ die Klammern direkt hinter dem Namen der Funktion weglassen.
  • Es soll hier aber im Folgenden die korrekte Syntax angewandt werden.

Das Beispiel demonstriert, dass es mit einer Funktion sogar möglich ist, Rechenoperationen auszuführen:

 archangel:/ # function addiere ()
 > {
 > let summe=$1+$2
 > echo -e "Die Summe ist $summe"
 > }
 archangel:/ # addiere 3 4
 Die Summe ist 7

Es wurde eine Funktion namens addiere erstellt.

  • Die geschweiften Klammern sorgen dafür, dass diese mehrzeilige Anweisung als ein einziger Befehl interpretiert wird.
  • Die Zeile let summe=$1+$2 sorgt dafür, dass der Variablen 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:

archangel:/ # function addiere { let summe=$1+$2; echo "Die Summe ist $summe"; }

Diese Methode wird jedoch von den meisten Benutzern als unübersichtlich empfunden.

  • Die beiden Leerzeichen innerhalb der geschweiften Klammern sind übrigens notwendig und dienen nicht nur der Übersichtlichkeit.
  • Es gibt eine alternative Syntax, um eine Funktion zu erstellen.

Die folgende Kommandozeile hat dasselbe Ergebnis zur Folge wie die vorangegangene:

archangel:/ # addiere () { let summe=$1+$2; echo "Die Summe ist $summe"; }

Da hier das Schlüsselwort function noch nicht einmal auftaucht, ist für einen Einsteiger kaum noch zu erkennen, um was es sich hier eigentlich handelt.

  • Der folgende Befehl enthält eine so genannte forkbomb, die auf einer Funktion basiert.
  • Versuchen Sie doch einmal zu verstehen, wie diese funktioniert.

Sie wird übrigens Ihren Computer zum Absturz bringen, wenn Sie den Befehl abtippen

archangel:/ # :(){ :|:& };:

Installation

Aufruf

Optionen

Unix GNU Parameter Beschreibung

Parameter

Umgebungsvariablen

Exit-Status

Wert Beschreibung
0 Erfolg
>0 Fehler

Anwendung

Problembehebung

Konfiguration

Dateien

Datei Beschreibung


Anhang

Siehe auch



Dokumentation

Links

Projekt

Weblinks