Archiv der Kategorie: Shell

Highlighten der Schrift im Terminal

Wenn im Terminal alles nur noch in schwarz-weiß dargestellt wird kann man mit folgender Dateiänderung wieder die farbige Hervorhebung einzelner Befehle wiederherstellen.
In der Datei ~/.bashrc nach der Zeile #force_color_prompt=yes suchen. Wenn diese vorhanden ist auskommentieren ansonsten am Ende der Datei force_color_prompt=yes einfügen.
Danach muss noch der Befehl source ~/.bashrc ausgeführt werden.

Programm mit Alt+F2 starten

Wenn man ein Programm oder Skript in seinem Homeverzeichnis liegen hat und dieses mittels „Alt+F2“ oder ähnlichem starten will muss man folgenden Befehl ausführen:

sudo update-alternatives --install "/usr/bin/programmname" "programmname" "/home/user/bin/programmname.sh" 1

„programmname“ steht hierbei für den Namen den man nachher eingibt
den Programmpfad, hier „/home/user/bin/programmname.sh“ muss man ebenfalls anpassen

Autovervollständigung auch als sudo

In der Datei /etc/bash.bashrc die Kommentierung entfernen und schon kann man auch als sudo die Autovervollständigung nutzen.

# enable bash completion in interactive shells
#if ! shopt -oq posix; then
#  if [ -f /usr/share/bash-completion/bash_completion ]; then
#    . /usr/share/bash-completion/bash_completion
#  elif [ -f /etc/bash_completion ]; then
#    . /etc/bash_completion
#  fi
#fi

bb

bb ist ein tolles ASCII-Art-Demo, das die Möglichkeiten von ASCII-Art beindruckend darstellt.

Wenn kein Sound zu hören ist, muss die Datei also-oss installiert werden und das Programm über aoss bb gestartet werden.

Ghostscript

Auflösung von PDF-Dateien verändern (z. B. um ein PDF-Dokument mit sehr hochauflösenden Bildern für den E-Mail-Versand zu komprimieren):

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

Für PDFSETTINGS sind folgende Optionen möglich:

  • /screen (nur für Bildschirmanzeige – 72 dpi)
  • /ebook (geringe Qualität – 150 dpi)
  • /printer (hohe Qualität – 300 dpi)
  • /prepress: (hohe Qualität mit hoher Farbtreue – 300 dpi)

Ein fertiges Skript für Nautilus gibt es unter http://launchpad.net/compress-pdf. Hier noch eine Kurzanleitung zur Installation des Skripts:

$ sudo apt-get install zenity ghostscript libnotify-bin
$ cd ~/.gnome2/nautilus-scripts
$ wget http://launchpad.net/compress-pdf/1.x/1.4/+download/Compress-PDF-1.4.tar.gz
$ tar -xzf Compress-PDF*.tar.gz && rm Compress-PDF*.tar.gz

Beispiele, wie PDF-Dateien in Bilder umgewandelt werden können zeigen die Artikel pdf2bmp und pdf2jpg

linuxlogo

Mit dem Programm linuxlogo lässt sich in der Konsole ein ASCII-Logo und Systeminformationen darstellen. Einfach linuxlogo installieren, dann in die .bashrc im home-Verzeichnis ans Ende linuxlogo schreiben und schon begrüßt einen ein die Kosnole mit Informationen.

awk

. Bawk Ausdruck { Anweisungen } Datei

Ausdruck

Der erste Parameter ist ein regulärer Ausdruck.

Anweisungen

Den zweiten Parameter stellen die awk-Anweisungen (anzugeben in geschweiften Klammern) dar. Diese Anweisungen legen fest, welche Manipulationen am Input-Stream durchgeführt werden sollen.

Datei

Der Parameter Datei legt die Datei fest, aus der der Input-Stream gelesen werden soll. Ohne Angabe liest awk von der Standardeingabe oder aus einer Pipe.

Beispiele

Beispiel 1: 2. Spalte ausgeben (z. B. Prozess-ID bei grep)

ps aux | grep suchstring | awk '{print $2}'

Beispiel 2: alle Zeilen einer Datei mit dem Buchstaben „n“ ausgeben:

awk '/n/' /etc/group

Wörter zählen

Folgendes Skript zählt die (verschiedenen) Wörter in einer Datei.

  1. Ermittle, welche Zeichen Wörter trennen.
  2. Ersetze diese Zeichen durch \n-Zeichen, so dass auf jeder Zeile nur ein Wort steht.
  3. Entferne leere Zeilen.
  4. Wandle alle Großbuchstaben in Kleinbuchstaben um.
  5. Sortiere alles.
  6. Zähle die mehrfach vorkommenden Zeilen und gebe die Statistik aus.

Als pipe formuliert sieht die Lösung wie folgt aus:

tr ' :.,;()"' '\n\n\n\n\n\n\n\n' < Eingabe.txt | # 1, 2
grep -v '^$' |                                   # 3
tr 'A-ZÖÜÄ' 'a-zöüä' |                           # 4
sort |                                           # 5 
uniq -c                                          # 6

Tastaturbefehle (BASH)

Wort-Befehle

Esc b Ein Wort zurück bewegen
Esc f Ein Wort vor bewegen
Strg-W Das Wort links vom Cursor löschen
Esc d Das Wort unter dem Cursor löschen
Strg-Y Das zuletzt gelöschte Wort zurückholen (»yank«)

Zeilenbefehle

Strg-A Cursor am Zeilenanfang positionieren
Strg-E Cursor am Zeilenende positionieren
Strg-K Vom Cursor bis zum Zeilenende alle Zeichen löschen

Diverse andere Befehle

Strg-T Vertauscht das unter dem Cursor stehende Zeichen mit seinem linken Nachbarn
Strg-U Löscht alle Zeichen vom Zeilenanfang bis zum Cursor
Strg-V Das nächste eingegebene Zeichen wird maskiert, d. h. seiner besonderen Bedeutung beraubt
Strg-C Unterbricht das gerade laufende Kommando
Strg-S Bildschirmausgabe anhalten
Strg-Q Gehaltene Bildschirmausgabe fortsetzen

übergebenen Pfad ermitteln bzw. abfragen

Überprüft, ob ein übergebener Pfad gültig ist. Wird kein Pfad übergeben, so wird einer über kdailog abgefragt.

if [ "$1" == "" ] ; then
 dir=`kdialog --getexistingdirectory "$dir" --caption "ScaleImage"`
 [ $? -eq 1 ] && exit
else
 dir="$1"
 [ -d "$dir" ] || dir="${1%/*}" # Dateinamen vom Pfad abtrennen
 [ -d "$dir" ] || exit # kein gültiger Pfad
fi

bc

Führt mathematische Berechnungen in der Konsole aus. Der zu berechnende Ausdruck wird über die Standardeingabe eingelesen und das Ergebnis über die Standardausgabe ausgegeben.

Über die Option -l wird die Mathematik-Library geladen. Diese ermöglicht Berechnungen mit Winkelfunktionen.

 +, -, *, /, ^ entsprechend der Mathematischen Bedeutung
 – wert liefert den negativen Wert von „wert“
 ++ var, — var die Variable wird um 1 erhöht/erniedrigt und dann das Ergebnis ausgegeben
 var ++, var — die Variable wird als Ergebnis ausgegeben und dann um 1 erhöht/erniedrigt
 <, <=, >, >=, ==, != Vergleiche (liefert 1 oder 0)
 !wert  liefert 1, wenn „wert=0“ ist
 &&  liefert 1, wenn zwei Ausdrücke nicht 0 sind
 ||  liefert 1, wenn keiner der Ausdrücke 0 ist

Für folgende Berechnungen muss die Mathematik-Library mit der Option -l geladen werden:

 s (x)  sin (x) in rad
 c (x)  cos (x) in rad
 a (x)  arctan(x) in rad
 l (x)  ln (x)
 e (x)  e-Funktion
 j (x)  Bessel-Funktion

Beispiele:
echo "(5+3)/2 | bc
echo "s (64.4)" | bc -l

mit scale abgetrennt durch ein Semikolon kann die Anzahl der Nachkommastellen, auf die gerundet wird, angegeben werden:
echo "scale=1; s (64.4)" | bc -l

read

Liest eine Zeichenkette von der Standardeingabe ein.
-n Anzahl der einzulesenden Zeichen
-s x Wartet maximal x Sekunden auf die Eingabe
-p Text gibt „Text“ vor dem Einlesen auf der Standardausgabe aus

read -n 1 -s 5 eingabe
 if [ $? -eq 1 ] ; then
 echo "Zeitüberschreitung für die Eingabe ..."
 fi
echo $eingabe

let

Ganzzahliges Rechnen mit Variablen und vergleichen von Variablen:

let a++ Variabel a um 1 erhöhen (Increment)
let a– Variable a um 1 erniedrigen (Decrement)
+, -, *, / let a=1+2
let a=$b/$c
** potenzieren z. B. let a=2**5
<=, >=, <, > Vergleich /liefert 1 oder 0) z. B. let a=’1<2′
==, != gleich, ungleich z. B. let a=’$b==$c‘
&, ^, | Bitweise AND, XOR, OR
&&, || logisches AND, OR

Berechnungen mit mehreren Rechenoperatoren:
let a=($b-1)/2

Quoting

Die folgenden Zeichen haben eine spezielle Bedeutung innerhalb der Shell:

 ; Befehls-Trennzeichen
 & Hintergrund-Verarbeitung
 ( ) Befehls-Gruppierung
 | Pipe
 <>& Umlenkungssymbole
 *?[]~+-@! Meta-Zeichen für Dateinamen
 ` ` (Backticks) Befehls-Substitution (Die Backticks erhält man durch [shift] und die Taste
neben dem Backspace.
 $ Variablen-Substitution
 [newline] [space] [tab] Wort-Trennzeichen

Die folgenden Zeichen können zum Quoten verwendet werden:

 “ „ Anführungszeichen Alles zwischen diesen Zeichen ist buchstabengetreu zu interpretieren. Ausnahmen sind folgende Zeichen, die ihre spezielle Bedeutung
beibehalten: $ ` „
 ‚ ‚ Ticks Alles zwischen diesen Zeichen wird wörtlich genommen, mit Ausnahme
eines weiteren ‚ und \. (Die Ticks erhält man bei deutschen Tastaturen
durch die Taste neben dem Backspace — ohne [shift].)
  \ Backslash Das Zeichen nach einem \ wird wörtlich genommen. Anwendung z. B.
innerhalb von “ „, um „, $ und ` zu entwerten. Häufig verwendet zur
Angabe von Leerzeichen (space) und Zeilenendezeichen, oder um ein
\-Zeichen selbst anzugeben.

Reguläre Ausdrücke

Sonderzeichen in Suchmustern:

 . Steht für ein beliebiges *einzelnes* Zeichen, mit Ausnahme des Zeilenendezeichens.
 * Steht für eine beliebige (auch leere) Menge des einzelnen Zeichens vor dem Sternchen.
Das vorangehende Zeichen kann auch ein regulärer Ausdruck sein. Beispielsweise steht .*
für eine beliebige Anzahl eines beliebigen Zeichens
 ^ Übereinstimmung, wenn der folgende Ausdruck am Zeilenanfang steht.
 $ Übereinstimmung, wenn der vorhergehende Ausdruck am Zeilenende steht.
 \\ Schaltet die Sonderbedeutung des nachfolgenden Zeichens ab.
 [ ] Steht für *ein* beliebiges Zeichen aus der eingeklammerten Gruppe. Mit dem Bindestrich
kann man einen Bereich aufeinanderfolgender Zeichen auswählen ([a-e]). Ein Zirkumflex
(~) wirkt als Umkehrung: [^a-z] erfasst alle Zeichen, die keine Kleinbuchstaben sind. Ein
Bindestrich oder eine schließende eckige Klammer am Listenanfang werden als Teil der
Liste angesehen, alle anderen Sonderzeichen verlieren in der Liste ihre Bedeutung.
 \\( \\) Speichert das Muster zwischen \( und \) in einem speziellen Puffer. In einer Zeile können
bis zu neun solcher Puffer belegt werden. In Substitutionen können sie über die
Zeichenfolgen \1 bis \9 wieder benutzt werden.
/ \{ \\} Steht für den Vorkommensbereich des unmittelbar vorhergehenden Zeichens. \{n\} bezieht
sich auf genau n Vorkommen, \{n,\} auf mindestens n Vorkommen und \{n,m\} auf eine
beliebige Anzahl von Vorkommen zwischen n und m. Dabei müssen n und m im Bereich
zwischen 0 und 256 liegen.
 \\< \\> Steht für ein Zeichen am Anfang (\<) oder am Ende (\>) eines Wortes.
 + Steht für ein oder mehrere Vorkommen des vorhergehenden regulären Ausdrucks = \{1,\}
 ? Steht für kein oder ein Vorkommen des vorhergehenden Ausdrucks. = \{0,1\}
 | Übereinstimmung, wenn entweder der vorhergehende oder der nachfolgende reguläre
Ausdruck übereinstimmen.
 ( ) Steht für die eingeschlossene Gruppe von regulären Ausdrücken.

Sonderzeichen in Ersatzmustern:

 \\ Hebt die spezielle Bedeutung des nächsten Zeichens auf.
 \\n Ruft das n-te Muster aus dem Puffer ab (siehe oben, unter \( \).) Dabei ist n eine Zahl
zwischen 1 und 9.
 & Verwendet das vorherige Suchmuster erneut als Teil eines Ersatzmusters.
 ~ Verwendet das vorherige Ersatzmuster erneut im momentanen Ersatzmuster.
 \\u Ändert das erste Zeichen des Ersatzmusters auf Großschreibung.
 \\U Ändert alle Zeichen des Ersatzmusters auf Großschreibung.
 \\l Ändert das erste Zeichen des Ersatzmusters auf Kleinschreibung.
 \\L Ändert alle Zeichen des Ersatzmusters auf Kleinschreibung.
 \\e Hebt das vorangegangene \u oder \l auf.
  \\E Hebt das vorangegangene \U oder \L auf.

Beispiele: Muster

 Haus Die Zeichenfolge „Haus“.
 ^Haus „Haus“ am Zeilenanfang.
 Haus$ „Haus“ am Zeilenende.
 ^Haus$ „Haus“ als einziges Wort in einer Zeile.
 [Hh]aus „Haus“ oder „haus“
 Ha[unl]s „Haus“, „Hals“ oder „Hans“
 [^HML]aus Weder „Haus“, noch „Maus“, noch „Laus“, dafür aber andere Zeichenfolgen, welche „aus“ enthalten.
 Ha.s Der dritte Buchstabe ist ein beliebiges Zeichen.
 ^…$ Jede Zeile mit genau drei Zeichen.
 ^\\. Jede Zeile, die mit einem Punkt beginnt.
^\\.[a-z][a-z] Jede Zeile, die mit einem Punkt und zwei Kleinbuchstaben beginnt.
 ^\\.[a-z]\\{2\} Wie oben, jedoch nur in grep und sed zulässig.
 ^[^.] Jede Zeile, die nicht mit einem Punkt beginnt.
 Fehler* „Fehle“(!), „Fehler“, „Fehlers“, etc.
 „Wort“ Ein Wort in Anführunszeichen.
 „*Wort“* Ein Wort mit beliebig vielen (auch keinen) Anführungszeichen.
 [A-Z][A-Z]* Ein oder mehrere Großbuchstaben.
 [A-Z]+ Wie oben, jedoch nur in egrep und awk zulässig.
 [A-Z].* Ein Großbuchstabe, gefolgt von keinem oder beliebig vielen Zeichen.
 [A-Z]* Kein, ein oder mehrere Großbuchstaben
 [a-zA-Z] Ein Buchstabe.
 [^0-9a-zA-Z] Symbole (weder Buchstaben noch Zahlen).
[0-9a-zA-Z] Jedes alphanumerische Zeichen.

Beispiele: Suchen und Ersetzen mit sed. Im Folgenden werden Leerzeichen durch _ und
Tabulatoren durch TAB gekennzeichnet.

 s/.*/( & )/ Wiederholt die ganze Zeile, fügt aber Klammern hinzu.
 s/.*/mv & &.old/ Formt eine Wortliste (ein Wort pro Zeile) zu mv-Befehlen um.
 /^$/d Löscht Leerzeilen.
 /^[_TAB]*$/d Löscht Leerzeilen und Zeilen, die nur aus Leerzeichen oder Tabulatoren
bestehen.
 / */ /g Wandelt ein oder mehrere Leerzeichen in ein Leerzeichen um.
\(.*\)\n sucht nach einem Ausdruck in Klammern, gefolgt von einem Zeilenumbruch

case

case Wert in
  Muster1) Befehle;;
  Muster2) Befehle;;
  ...
  *) Befehle;;
esac

Die Befehle hinter *) werden ausgeführt, wenn keines der aufgeführten Muster passt. Muster
können über ein ODER (|) verknüpft werden: Muster1|Muster2.

test […]

Der Befehl test dient zum Überprüfen von Dateitypen bzw. Vorhandensein von Dateien und zum Vergleichen von Werten. Der Aufruf erfolgt mit test Vergleich wobei Vergleich die Prüfung bzw. den Vergleich enthält. Als Ergebnis gibt test 0 für Wahr (true) und 1 für Falsch (false) zurück. Der Rückgabewert wird mit Hilfe der Shelleigenen Variablen $? ermittelt. Es gibt Vergleiche für Dateien, Zeichenketten und Integer-Zahlen.

Anstatt des Befehls test kann die Bedingung auch in eckige Klammern gesetzt werden. Hierbei ist darauf zu achten, dass zwischen den Klammern und dem Vergleich jeweils ein ein Leerzeichen steht:  [ Vergleich ]
Weiterlesen

Befehle in Abhängigkeit ausführen

Ein zweiter Befehl wird in Abhängigkeit eines ersten Befehls ausgeführt:

  1. Zweiter Befehl nach Beendigung des ersten Befehls ausführten:
    date; ls 
  2. Zweiter Befehl ausführen, wenn der erste erfolgreich war:
     make && make install
  3. Zweiter Befehle ausführen, wenn der erste nicht erfolgreich war:
    ls datei || touch datei
  4. Kombination aus 2 und 3:
     ls datei && echo "Datei vorhanden" || touch datei

tee

Der Befehl tee gibt die Standardeingabe auf die Standardausgabe und in eine Datei aus.

ls -l | tee liste.txt
gibt den Inhalt des aktuellen Verzeichnisses auf die Standardausgabe und in eine Datei aus.

Eingabeumlenkung

Datei als Standardeingabe verwenden: <
echo < datei.txt

Umlenkung mit Hilfe von Datei-Deskriptoren:

Befehl <&n Standard-Eingabe für Befehl wird vom Datei-Deskriptor n übernommen.
Befehl m<&n Der gleiche Vorgang, nur wird die Eingabe, die normalerweise vom Datei-
Deskriptor m stammt, aus dem Datei- Deskriptor n übernommen.
Befehl <&- Schließt die Standard-Eingabe.

Ausgabeumlenkung

  1. Umlenkung der Standardausgabe in eine (neue) Datei: >
    ls > inhalt.txt
  2. Umlenkung der Standardausgabe von zwei Befehlen in eine (neue) Datei: () > 
    (date;ls) > inhalt.txt
  3. Umlenkung der Standardausgabe in eine bestehende Datei (anhängen): >>
    ls >> inhalt.txt
  4. Umlenkung der Fehlermeldungen in eine Datei: 2>
    ls 2> fehler.txt
  5. Umlenkung der Standardausgabe und der Fehlermeldungen in eine Datei: >&
    ls >& ausgaben.txt

Umlenkung mit Hilfe von Datei-Deskriptoren:

Befehl >&n Standard-Ausgabe von Befehl an den Datei-Deskriptor n übergeben.
Befehl m>&n Der gleiche Vorgang, nur wird die Ausgabe, die normalerweise an den Datei-
Deskriptor m geht, an den Datei-Deskriptor n übergeben.
Befehl >&- Schließt die Standard-Ausgabe.

Mehrfach-Umlenkung:

Befehl 2> Datei Fehler-Ausgabe von Befehl in Datei schreiben. Die Standard-Ausgabe
bleibt unverändert (z. B. auf dem Terminal).
Befehl > Datei 2>&1 Fehler-Ausgabe und Standard-Ausgabe von Befehl werden in die Datei
geschrieben.
(Befehl > D1) 2>D2 Standard-Ausgabe erfolgt in die Datei D1; Fehler-Ausgabe in die Datei D2.

pipe

Über eine pipe | kann die Standardausgabe eines Befehls auf die Standardeingabe eines anderen Befehls umgeleitet werden:
ls | less
ps ax | grep daemon | less
find -name "*.pdf" -print0 | xargs -0 echo

Datei zeilenweise einlesen

Mit while:

while read LINE; do 
  echo ${LINE[1]} 
done < infile.txt

Aufruf über File-Descriptor (ermöglicht direkten Zugriff auf die Datei „datendatei“):

exec 3<Datendatei
while read -u 3; do
  echo ${REPLY} 
done
exec 3<&-

IP-Adressen aus einer Datei auslesen (Durch setzen des Punktes in der Trennzeichenvariablen IFS werden die durch „read“ eingelesenen IP-Adressen aufgeteilt und in die Array-Variable „IP“ geschrieben):

exec 3<iplist 
IFS=".${IFS}" 
while read -u 3 -a IP; do 
 echo ${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]} 
done 
exec 3<&-

while-Schleife

while Bedingung ; do
  # Befehle
done

Beispiele:

Endlosschleife:

while : ; do
# auszuführender Quelltext
# Schleife wird mit break beendet
done

While-Schleife mit find (Variante mit for (siehe for-Schleife) ist ca. 30% schneller):

find /home -type f | while read; do
  echo ${REPLY}
done

alle *.jpg rekursiv in allen Unterordnern finden (hierzu gibt es auch eine elegante Variante mit for, die jedoch nur in der Bash funktioniert):

 while read -rd "" i; do 
  echo "$i" 
done < <(find /home/user/unterordner/ -iname "*.jpg" -print0)

Datei zeilenweise einlesen (Eine Variante mit File-Descriptor gibt es hier):

while read LINE; do
  echo ${LINE[1]}
done < infile.txt

Fehlermeldung „Error:“ in einer Datei suchen:

while [ $error \> 0 ] ; do 
 echo Es sind Fehler aufgetreten! 
 error=`grep -c Error: Datei.txt` 
done

for-Schleife

for x [ in Liste ] ; do
  # Befehle
done

continue [n]: springt zum Schleifenanfang und übergeht dabei n Duchläufe
break [n]: verlässt n Schleifenebenen

Beispiele:

Script um alle Bilder in einem Verzeichnis zu verkleinern:

for file in * ; do
  convert -scale 100x $file klein_$file
done

Dieses Script wandelt alle PDF-Dateien im Verzeichnis in Postscript-Dateien um:

for i in *.pdf; do 
  pdf2ps $i
done

Zählerschleife:

for ((i=1; i<=100; i++)) {
  echo $i
}

For-Schleife mit find (schnell):

 for f in $(find /home -type f); do 
  echo ${f} 
done

Alle *.jpg finden und bearbeiten (funktioniert nur in der Bash):

shopt -s globstar nocaseglob 
for i in /home/user/unterordner/**/*.jpg; do 
  echo $i 
done

übergebene Parameter

$# Anzahl der Parameter
$1 1. Parameter
$2 2. Parameter
.
.
$n n. Parameter

$* oder $@ alle Parameter
$? Rückgabewert des letzten Kommandos
$$ Prozessnummer der aktiven Shell
$! Prozessnummer des letzten Hintergrundprozesses
ERRNO Fehlernummer des letzten fehlgeschlagenen Systemaufrufs
PWD Aktuelles Verzeichnis (wird durch cd gesetzt)
OLDPWD Vorheriges Verzeichnis (wird durch cd gesetzt)

Dateinamen, Dateiendung und Pfad trennen

  • Pfad ohne letzten Slash:  DIR="${i%/*}"
    alternativ:  DIR=`dirname "$i"`
  • Pfad mit Dateinamen ohne Endung:  xBASE="${i%.*}"
    alternativ:  xBASE=`echo "$i" | sed 's/\(.*\)\..*/\1/'`
  • Aktuellen Pfad durch . ersetzen:  [ "$DIR" == "$i" ] && DIR=.
  • Dateiname mit Endung: FILE="${i##*/}"
    alternativ: FILE=`basename "$i"`
  • Dateiendung: FILEEXT=${i##*.}
    alternativ:  FILEEXT=`echo "$i" | sed 's/.*\.\(.*\)/\1/'`
    Dateiendung in Großbuchstaben:  FILEEXT=`echo ${i##*.} | tr '[:lower:]' '[:upper:]'
  • Dateiname ohne Endung: FILEBASE=${FILE%.*}

Stringbearbeitung (Variablen)

Aufruf Beschreibung
${name:n:m} liefert Teil eines Strings
n = Offset, negativ = vom Ende her (in diesem Fall muss ein Leerzeichen vor dem Minus stehen!)
m = Anzahl (kann entfallen)
${name#a} entfernt den Anfang, wenn dieser mit a übereinstimmt
a = Suchstring (Windcards (?,*) sind erlaubt)
${name##*a} entfernt alle Übereinstimmungen mit a vom Anfang her
a = Suchstring (Windcard „*“ notwendig!)
${name%a} entfernt das Ende, wenn dieses mit a übereinstimmt
a = Suchstring (Windcards (?,*) sind erlaubt)
${name%%a*} entfernt alle Übereinstimmungen mit a vom Ende her
a = Suchstring (Windcard „*“ notwendig!)
${name/s/e} Suchen / Ersetzen (erste Fundstelle)
s = Suchstring (Windcards (?,*) sind erlaubt)
e = Ersatzstring (kann entfallen -> Suchstring wird entfernt)
${name//s/e} Suchen / Ersetzen (alle Fundstellen)
s = Suchstring (Windcards (?,*) sind erlaubt)
e = Ersatzstring (kann entfallen -> Suchstring wird entfernt)
${name:-a} Standardwert zurückgeben
gibt den Wert „a“ zurück, wenn die Variable „name“ leer ist
${name:=a} Standardwert setzen und zurückgeben
gibt den Wert „a“ zurück und weist diesen der Variablen „name“ zu, wenn die Variable „name“ leer ist
${name:?a} Fehlermeldung und Programmabbruch
Wenn die Variable „name“ leer ist, wird die Fehlermeldung „a“ ausgegeben und das Skript beendet.
${name:+a} liefert „a“, wenn „name“ nicht leer ist
mit dieser Funktion kann z.B. ein „/“ eingefügt werden, wenn eine Datei übergeben wird (z.B. $HOME${datei:+/}$datei )

export

export PATH="/home/ich/meineProgramme:"$PATH":/home/ich/proggis"

Umgebungsvariable global exportieren:

source export variable="inhalt"

.profile

Diese Konfigurationsdatei wird von der Login-Shell ausgewertet, jedoch nicht von der bash, sofern die Datei  ~/.bash_profile oder ~/.bash_login existiert.

In der Datei .profile sollte folgendes eingetragen sein:

# set PATH so it includes user’s private bin if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:“${PATH}“
fi

Environmentvariablen setzen

PATH=$PATH:/home/bin fügt den Ordner /home/bin der Variable PATH hinzu.

In der Datei .profile sollte folgendes eingetragen sein:

# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}"
fi

Zeichensatz in der Konsole einstellen

Einstellungen in: /etc/console-tools/config 

dpkg-reconfigure console
dpkg-reconfigure console-data
  1. Paket localeconf installieren mit
    sudo apt-get install localeconf
  2. Datei
    /var/lib/locales/supported.d/de
    als Root mit einem Editor bearbeiten:
    sudo vi /var/lib/locales/supported.d/de.
    Folgende Zeile anhängen: de_DE@euro ISO-8859-15
  3. Nach dem Speichern der Datei die
    /etc/locale.gen
    generieren:
    sudo dpkg-reconfigure locales
  4. Jetzt mit localeconf den Zeichensatz systemweit auswählen:
    sudo dpkg-reconfigure localeconf

Einstellung des Zeichensatzes mit
setxkbmap de

Weitere Programme rund um den Zeichensatz: setkeycodes, scancode, keycode

History aller Shells speichern

Normalerweise wird immer nur die History der zuletzt geschlossenen Shell gespeichert. Durch hinzufügen der folgenden Zeilen in die Datei ~/.bashrc werden die Eingaben aller Shells gespeichert:

  • Einstellung, damit neue Befehle an die History-Datei anhängen kann: shopt -s histapped
  • Die History-Daten vor ausgabe des nächsten Prompt speichern: PROMPT_COMMAND="history -a"

Will man Veränderungen an der bashrc aktivieren so hilft . ~/.bashrc 
Dieser Befel liest die .bashrc und die zugehörigen Dateien neu ein. Mit exec bash -$- wird die Shell neu gestartet.

Prompt einstellen

 ~/.bashrc: PS1="\u@\h \w \$ " 
Dies steht für user@host aktuelles_verzeichnis $

grüne Schrift:
 ~/.bashrc: PS1="\[\033[0;32;40m\u@\h:\w\$ \]" 

Sowohl für den Vordergrund als auch für den Hintergrund stehen 8 Farben zur Verfügung.

Auswahl: schwarz, rot, grün, gelb, blau, magenta, cyan und weiß. Die Zahlen dafür sind: 30, 31, 32, 33, 34, 35, 36, 37.

Das Setzen der Hintergrundfarbe verläuft genauso, allerdings statt 3 mit 4. Also 40, 41, 42, 43, 44, 45, 46, 47.

Beispiel:
 ~/.bashrc: PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]" 

Bash-Konfigurationsdateien

Es gibt für die Bash zwei Konfigurationsdateien:

.bashrc (Terminal unter X)
.bash_profile (Konsole / Login-Shell)

Für die Konsolen wird die .bash_profile benutzt. Für ein Terminal unter X wird die .bashrc benutzt. Daher setzt man normalerweise seine Einstellungen in der .bashrc und sourced diese in der .bash_profile, in der dann meist nur folgende Zeile steht:

[ -f ~/.bashrc ] && . ~/.bashrc

tr

Zeichen in Dateien ersetzen

Option Bedeutung
-d Entfernt die Zeichen in Satz1 aus der Zeichenfolge
-s Entfernt mehrfache Vorkommen der Zeichen in Satz1
-c Ersetzt die Zeichen, die nicht in Satz1 vorkommen

Beispiele:
cat file1 | tr altes_Wort neues_Wort > NeueDatei

tr -d ':' < /etc/passwd 
liest /etc/passwd und entfernt aus diesem Zeichenstrom alle Doppelpunkte.

tr -s '\n' 
ersetzt doppelte oder mehrfache Leerzeilen durch eine einzige.

tr "\n" " " < dateiname > neue_datei 
löscht alle Zeilenumbrüche

tr [:lower:] [:upper:]
ersetzt alle Kleinbuchstaben aus der Standardeingabe durch Großbuchstaben und gibt das Ergebnis auf der Standardausgabe aus.

sed

sed verwendet reguläre Ausdrücke

Suchen und ersetzen von Text in Dateien: sed 's/Suchtext/Ersetztext/g' quelldatei.txt > zieldatei.txt Ist im zu bearbeitenden Text ein Slash / , so muss dieser mit  \/  angegeben werden.
Leerzeichen in Dateinamen in Unterstriche umwandeln: for a in *; do mv "$a" "$(echo $a | sed 's/ /_/g')"; done