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.
Archiv der Kategorie: Shell
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.
letzten Befehl wiederholen
Wenn man bei apt-get update
das sudo
vergessen hat, muss man nicht den ganzen Befehl neu tippen, sondern kann einfach mittels der Eingabe von sudo !!
das sudo voranstellen:
sudo apt-get update
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.
- Ermittle, welche Zeichen Wörter trennen.
- Ersetze diese Zeichen durch \n-Zeichen, so dass auf jeder Zeile nur ein Wort steht.
- Entferne leere Zeilen.
- Wandle alle Großbuchstaben in Kleinbuchstaben um.
- Sortiere alles.
- 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
Rechnen mit Variablen
Direktes Rechnen mit Variablen ohne let oder bc.
Hier einige Beispiele:
a=$((b*3)) a=$((b+c*2)) a=$((b**4)) a=$((5-b))
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
break
Unterbricht eine Schleife (while, until, for):
while : ; do read a [ $a == "x" ] && break done
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
dialog / kdialog
Mit dem dialog-Befehl (bzw. kdialog-Befehl) könne in Scripten Abfragedialoge verwendet werden.
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.
until-Schleife
until Bedingung ; do # Befehle done
Datei-Deskriptoren (stdin, stdout, stderr)
Datei-Deskriptor | Name | Gebräuchliche Abkürzung | Typischer Standard |
0 | Standardeingabe | stdin | Tastatur |
1 | Standardausgabe | stdout | Terminal |
2 | Fehlerausgabe | stderr | Terminal |
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
xargs
Generiert aus der Standardeingabe eine Kommandozeile und führt diese aus:
find -name "*.pdf" -print0 | xargs -0 echo
sucht rekursiv alle pdf-Dateien und gibt diese mit echo aus.
source (.)
Kommandos aus einer Datei auslesen und ausführen:
source Skriptname
. Skriptname
Befehle in Abhängigkeit ausführen
Ein zweiter Befehl wird in Abhängigkeit eines ersten Befehls ausgeführt:
- Zweiter Befehl nach Beendigung des ersten Befehls ausführten:
date; ls
- Zweiter Befehl ausführen, wenn der erste erfolgreich war:
make && make install
- Zweiter Befehle ausführen, wenn der erste nicht erfolgreich war:
ls datei || touch datei
- 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
- Umlenkung der Standardausgabe in eine (neue) Datei:
>
ls > inhalt.txt
- Umlenkung der Standardausgabe von zwei Befehlen in eine (neue) Datei:
() >
(date;ls) > inhalt.txt
- Umlenkung der Standardausgabe in eine bestehende Datei (anhängen):
>>
ls >> inhalt.txt
- Umlenkung der Fehlermeldungen in eine Datei: 2
>
ls 2> fehler.txt
- 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
Pause für x Sekunden
Skriptabarbeitung für z. B. 5 Sekunden unterbrechen: sleep 5
if
if Bedingung ; then # Befehle elif Bedingung ; then # Befehle else # Befehle fi
tty
gibt das device des aktuellen Terminals aus (mit dem die Standardeingabe verbunden ist)
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
Übergabeparameter auswerten (Beispielscript)
Einem Skript können Parameter übergeben werden. Hierzu werden üblicherweise [OPTIONS] verwendet, die entweder eine Funktion aktivieren oder auch einen zusätzlichen Parameter übergeben. Weiterlesen
ü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)
Shell-Skript (1. Zeile)
Ein Shellskript (das in der BASH ausgeführt werden soll) muss mit
#!/bin/bash
beginnen und ausführbar gemacht werden.
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 ) |
Eingabe-History aktivieren
in der Datei /etc/inputrc
oder ~/.inputrc
folgende Einträge freischalten:
"\e[5~": history-search-backward "\e[6~": history-search-forward
oder
"\e[A": history-search-backward "\e[B": history-search-forward
echo
Textausgabe mit Zeilenumbruch: echo Text
Textausgabe ohne Zeilenumbruch: echo -n Text
alias
alias test=<Befehle>
muss in ~/.bashrc eingetragen werden
alias -p
zeigt alle Aliase an
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
env
gibt die Umgebungsvariablen (Environment) aus
chsh
Ändert die Login-Shell
clear
löscht den Inhalt der Konsole
stty
Setzen und Abfragen der Terminaleinstellungen.
Zeichensatz in der Konsole einstellen
Einstellungen in: /etc/console-tools/config
dpkg-reconfigure console dpkg-reconfigure console-data
- Paket localeconf installieren mit
sudo apt-get install localeconf
- 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 - Nach dem Speichern der Datei die
/etc/locale.gen
generieren:
sudo dpkg-reconfigure locales
- 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
Konsole
konsole -e Befehl
lässt einen Befehl in der Konsole ablaufen
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.
Beep in der Kommandozeile abschalten
Den Beep in der Kommandozeile abschalten:
In der Datei /etc/inputrc
die Zeile set bell-style none
aktivieren
automatisches Abmelden
Das Eintragen von TMOUT=180
in der Datei .bashrc führt zum automatischen Logout nach 3 Minuten
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\]"
Tab-Autovervollständigung auch als sudo
Wenn als sudo die Autovervollständigung nicht funktioniert, dann muss die ~/.bashrc um fogende Zeilen ergänzt werden:
if [ "$PS1" ]; then complete -cf sudo fi
persönlichen bin-Ordner hinzufügen
In die Datei .bashrc folgendes eintragen:
[ -d ~/bin ] && PATH=$PATH:~/bin
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
persönlichen bin-Ordner mit Alt+F2 aufrufen
Die Datei /etc/X11/Xsession.d/49add-user-path mit sudo touch /etc/X11/Xsession.d/49add-user-path
erstellen. Folgenden Inhalt in die neu erstellte Datei schreiben [ -d "$HOME/bin" ] && PATH="$HOME/bin:$PATH"
ausloggen, einloggen, fertig
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
exit
Konsole beenden (auch Strg+D
oder logout)