bash - Die Bourne again shell

Vorwort

bash ist die GNU/Linux-Standard-Shell. Sie wurde vom GNU-Projekt entwickelt. Sie ist abwärts kompatibel zur sh, der ursprünglichen Unix Shell. Shellskripte sollte man immer in sh bzw Bash schreiben und nicht in eine der zahlreichen anderen Shellvarianten (ksh, (t)csh).

Man kann damit nicht nur (wie unter DOS mit Batches) einfache Abläufe automatisieren, sondern richtige Programme erstellen, da diese Shell viel mächtiger ist und auch die UNIX-Befehle viel besser auf "Kooperation" nach dem Baukastensystem eingestellt sind.

Ab Version 2.04 bietet die bash eine programmierbare automatische Eingabe-Vervollständigung, siehe dazu den Bericht auf ProLinux: Die Tabulatortaste (TAB) ergänzt oft das angefangene Wort: Ist es eindeutig, reicht ein TAB, sonst listet ein zweites TAB die Alternativen auf. Ein Pieps zeigt an, dass keine Ergänzungsmöglichkeit gefunden wurde. Damit können Dateienamen, Kommandos, aber teilweise auch Parameter in Kommandos komfortabel und gedächtnisplatzschonend ergänzt werden.

Versionstand

Start

Der Kommandozeileninterpreter führt beim Start nacheinander die folgenden Dateien aus, in denen systemweite oder benutzer-spezielle Einstellungen vorgenommen werden können, die bei jedem Anmelden an das System vorgenommen werden:

Von bash wird aufgerufen: /etc/profile, dann ~/.bash_profile. Falls .bashrc aufgerufen wird, dann deswegen, weil ein Aufruf von ~/.bashrc im script ~/.bash_profile drinsteht.

In ~/.bashrc kann der Benutzer alle seine Abkürzungen und bevorzugten Einstellungen vornehmen.

Die Eingabeaufforderung kann angegeben werden durch die env-Variable PS1:

export PS1="\u \w #"

Besondere Bedeutung haben die Umschreibungen:

Einen farbigen Prompt erreicht man durch die entsprechenden Escape-Codes. Beispiel:

export PS1="\[\033[1;73m\][\$(date +%H:%M)]\[\033[1;36m\][\[\033[1;34m\]\u\[\033[1;33m\]@\[\033[1;32m\]\h:\[\033[1;35m\]\w\[\033[1;36m\]]\[\033[1;31m\]\\$\[\033[0m\] "

Dies ergibt einen Prompt mit hellrotem Benutzernamen, grünem Hostnamen und orangem Arbeitsverzeichnis.

von bash benutzte Umgebungsvariablen

bash benutzt die folgenden env-Variablen

Hinweis: Wenn ein Script mit vorangestellten ". " (oder "source ") aufgerufen wird, dann wird keine neue Ausprägung von bash das Script ausführen, sondern die Eingabebash direkt. Nur so können Variablen von einem Script übernommen werden.

Wie Befehle eingegeben werden können

Durch den senkrechten Strich | wird die Ausgabe eines Programms (Prozess) in das nachfolgende Programm umgeleitet. 3 Programme werden dadurch gestartet : ls zeigt das Inhaltsverzeichnis an, grep sucht in der Ausgabe von ls nach dem Textstring "tg" und gibt nur die Zeilen weiter, die tg enthalten, more zeigt dann alles seitenweise an.

Mit $ beginnen Variablennamen:

Dateien werden von bash ausgeführt, wenn in der ersten Zeile steht:

Steuercodes (Ctrl-)

Eingebaute bash-Befehle

Hilfe über die eingebauten bash-Befehle gibt es mit help

Standardverzeichnis wechseln. siehe #bsp_cd

declare -x PATH

Eingabe:

cd
echo `pwd` `dirs`
cd /home/hjh/home/cc
echo `pwd` `dirs`
cd /tmp
echo `pwd` `dirs`

Anzeige:

hjh ~ : echo `pwd` `dirs`
/home/hjh ~
hjh ~ : cd /home/hjh/home/cc
hjh ~/home/cc : echo `pwd` `dirs`
/home/hjh/home/cc ~/home/cc
hjh ~/home/cc : cd /tmp
hjh /tmp : echo `pwd` `dirs`
/tmp /tmp

echo Kommando ist abgearbeitet

lenny:~# VAR=wert
lenny:~# echo $VAR
wert
lenny:~# bash
lenny:~# echo $VAR

lenny:~# exit
lenny:~# echo $VAR
wert
lenny:~# export VAR=wert
lenny:~# echo $VAR
wert
lenny:~# bash
lenny:~# echo $VAR
wert
lenny:~#

Hinweis : Normalerweise stehen jedes der Wörter if then else fi in eigenen Zeile. Man kann aber auch den "logische Zeilenwechsel" ; verwenden.

read -p Welche_Datei_:

read -p Welche_Datei_: INPUT

while true ; do clear ; free ; sleep 3s ; done ;

Angabe von Dateinamen als Aufruf-Parameter

Programme werden bevorzugt aufgerufen mit Dateinamen. Die Programme selbst erhalten Argumente. Die shell, hier bash, erweitern Gruppen zu einer Liste einzelner Dateinamen. Nachfolgend der Aufruf eines Programms qqmain

Der Kommandozeileneditor

Ctrl-R l s Sucht rückwärts im Kommandozeilenspeicher (engl.: history) nach "ls"

Esc < Anfang des Kommandozeilenspeichers

Esc > Ende des Kommandozeilenspeichers

Den Kommandozeileneditor gibt es in zwei Ausführungen :

wie vi

wie emacs

Beispiele für bash - scripts

In ~/.bashrc :

PATH=${PATH}:/home/hjh/home/cc/linux:/home/hjh/home/cc/bin
export PATH

Zum Anzeigen eingeben:

grep "#\!/bin/sh" *

Beispiel HERE-Dokument: Variablen werden expandiert:

cat >/tmp/killer <<EOS ; chmod +x /tmp/killer ; /tmp/killer
echo "Wir beenden die ausführende Shell!"
kill -9 $$
EOS

Ausgabe von  grep kill /tmp/killer  liefert:

kill -9 6893

Beispiel HERE-Dokument: Variablen werden nicht expandiert:

cat >/home/bin/my_profile <<"EOS" ; chmod +x /home/bin/my_profile
alias "my_pid=echo 'Aktuelle Prozess-Id: ' $$"
EOS

Ausgabe von  grep alias /home/bin/my_profile  liefert:

alias "my_pid=echo 'Aktuelle Prozess-Id: ' $$"

Tipps & Tricks

Fragen und Antworten

Frage: ich muss ein Skript programmieren, das unter bash aber auch unter sh (Solaris) läuft. Wo bekomme ich ein sh für Linux ? -- ThomasKalka 2002-10-22 14:52:14

Frage: wie verhindere ich unkorrekte Umbrüche bei farbigen Prompts?

Bash (zuletzt geändert am 2010-10-21 15:18:13 durch MarcusSchiemann)