homeUnix & Internet Unix & Shell-Programmierung: shell-Einführung Prof. Dr. Uwe Schmidt FH Wedel

shell-Einführung

weiter

weiter

wildcards

wildcards
Suchmuster für die shell für die Suche im Dateisystem
*
beliebige Zeichenfolge
?
ein beliebiges Zeichen
[abc]
ein Zeichen aus der Zeichenmenge a,b,c
[0-9]
ein Zeichen aus dem Zeichenintervall 0,1,...,9
{abc,def,ghi}
ein Wort aus der Liste der Wörter
merke
Wortlisten sind eine bash-Erweiterung
nicht in der Bourne-shell sh möglich
weiter
Beispiele
echo *
echo ch*
echo ch*.*
 
echo ???
echo ???*
 
echo ch[0-9].*
echo [0-9A-Za-z]*
 
echo *.[ch]
 
#--------------------
 
echo xxx > -r
rm -r           # ???
 
echo xxx > -rf
rm -rf          # ???
 
#--------------------
 
echo file{1,2,3}
echo file{1a,1b,1c}
echo file{1,2,3}.{c,h}
weiter
merke
Die Semantik von Wildcard Expansion von [a-z] ist auf neueren Linux-Systemen abhängig von der eingestellten Sprache.
 
Ist z.B. Deutsch oder English eingestellt, so wird nicht zwischen Groß- und Kleinbuchstaben unterschieden.
merke
Die Sortierung der Dateien bei Wildcards ist ebenfalls abhängig von der eingestellten Sprache.
 
Ist z.B. Englisch oder Deutsch eingestellt, so werden beim Sortieren Groß- und Kleinbuchstaben als gleich angesehen.
 
Ist als Sprache C eingestellt, ist wie in den guten alten Unix-Zeiten Groß- und Kleinschreibung sowohl bei der Auswahl als auch beim Sortieren sigifikant.
eingestellte Sprache
Das Kommando locale listet die Spracheinstellung
Sprache umschalten
export LC_ALL=C schaltet die Spracheinstellung um auf C.
Damit wird das ursprüngliche Verhalten wieder hergestellt.
weiter

weiter

Ein- und Ausgabeumlenkung

> datei
Standardausgabe in eine Datei schreiben
weiter
>> datei
Standardausgabe an eine Datei anhängen
weiter
< datei
Standardeingabe aus einer Datei lesen
weiter
Beispiele
sort > sort.out
 
sort >> sort.out
 
sort < sort.input
 
sort < sort.input > sort.out
 
#--------------------
 
sort < file    # Unterschiede
sort   file    # ???
 
wc tmp > tmp   # Resultat
weiter

weiter

pipes

pipes
Röhren
direkte Verbindungen zwischen der Ausgabe eines Programms und der Eingabe eines 2. Programms
weiter
Syntax
cmd1 | cmd2
weiter
Implementierung
ein FIFO Puffer im Betriebssystem mit Synchronisation
weiter
Beispiele
ls > tmp
wc -l  < tmp
rm tmp
 
#--------------------
 
ls | wc -l
 
ls -l --time-style=long-iso | sort -k 6,7 -r | more
weiter
Interpretation
von pipe-Kommandos: cmd1 | cmd2
Diagramm
weiter
.1
Erzeugen von Kindprozessen für cmd1 und cmd2
.2
stdin sh --> stdin cmd1
.3
stdout sh --> stdout cmd2
.4
stdout cmd1 --> stdin cmd2
.5
shell wartet auf die Beendigung beider Kindprozesse
weiter

weiter

Filter

Filter
Programme, die mit pipes kombiniert werden können
lesen von stdin
(wenn keine Dateien auf der Kommandozeile angegeben sind)
schreiben auf stdout
schreiben Fehler- und Diagnosemeldungen auf stderr
weiter
Diagramm
weiter
Beispiele
cat, more, sort, tail, tee, tr, sed, uniq, grep, wc, sh, bash
weiter
Anfangsstücke
ls, who, echo, date

oder Filter mit Dateieingabe

weiter
gut
Filter und pipes sind eine sehr einfache und mächtige Art Programme zu kombinieren
merke
gängige Programmiersprachen (Pascal, C, C++, ...) besitzen keine Sprachelemente für die Kombination von Programmteilen durch pipes
merke
unflexibel
weiter
Beispiele
cat /usr/share/dict/words \
  | grep a \
  | grep e \
  | grep i \
  | grep o \
  | grep u
weiter

weiter

Kommandofolgen

Syntax
cmd1 ; cmd2
Prioritätsklammern
{ ... }
Subshellklammern
( ... )
weiter
Beispiele
date ; who
 
date ; who | wc -l
 
{ date ; who ; } | wc -l
 
{ date
  who
} | wc -l
 
 
#--------------------
 
 
# Dateibaeume mit tar kopieren
 
( cd srcdir ; \
  tar -cvf - . ) | tar -xvf -
 
weiter

weiter

shell-Variablen

Syntax
setzen
variable=wert
erzeugen
implizit
lesen
$variable
 
${variable}
weiter
exportierte Variablen
Umgebungsvariablen

Variablen, die auch in den Kindprozessen sichtbar sind

weiter
Syntax
export variable
weiter
set
alle gesetzten Variablen mit Wert auflisten
weiter
env
alle exportierten Variablen mit Wert auflisten
weiter
Beispiele
abc=123        # neue Variable setzen
 
set            # alle Variablen
env            # alle Umgebungsv.
 
bash           # neue shell
env            # Umgebung in neuer shell
exit
 
export abc
 
bash           # neue shell
env            # Umgebung in neuer shell
exit
weiter
PATH
Umgebungsvariable für die Konfiguration der Suche nach Kommandos
Test
echo $PATH
weiter
PS1
Umgebungsvariable für die Konfiguration der Zeichenfolge, die von der shell ausgegeben wird, bevor sie auf eine Kommando-Eingabe wartet.
Test
echo $PS1
weiter
which
Suche, wo im Verzeichnisbaum ein Kommando (ein ausführbares Programm) gespeichert ist.
Tests
which --all test

weiter

Quoting

Maskieren
von Zeichen:
Interpretation in der shell verhindern
Sonderzeichen
Zwischenraum, Tabulator, Zeilenvorschub,
*, ?, [, ], >, >>, <, |, &, $, (, ), ;, {, }, ', ", \, `
weiter
'text'
alle Zeichen außer ' bleiben uninterpretiert
weiter
\z
das Zeichen z bleibt uninterpretiert
weiter
"text"
wie bei 'text'
nur $, \ und `...` werden interpretiert
Variablensubstitution
ein Zeichen maskieren
Kommando-Aufrufe
weiter
`cmd`
schräg gestellte Hochkommata: Auswertung von Kommandos auf Parameterposition
weiter
$(cmd)
Alternative zu `cmd`
Vorteil: Schachtelung ist möglich
weiter
Beispiele
grep title `find . -name '*.html' -print`
 
grep title $(find . -name '*.html' -print)
 
echo `date`
 
echo $(date)
echo $(echo date)
echo $(echo $(date))
 
# Alternative zu grep ... $(find ...)
 
find . -name '*.html' -print0 | xargs --e grep -n title
 
man xargs       # kann nuetzlich sein
weiter
xargs -P <n>
Die -P-Option kann dazu genutzt werden, bei vielen Argumenten, die Verarbeitung auf n Prozesse zu verteilen, und so Mehrkern-Rechner besser auszunutzen und die Gesamtausführungszeit eines Kommandos zu verringern.
merke
Vorsicht: manche browser stellen die schräg gestellten Hochkommata in einem fixed font genauso dar, wie die normalen einfachen Hochkommata.
Aus dem Kontext geht aber meistens hervor, welche Hochkommata gemeint sind.
 
Dieses sind einfache Hochkommata: ''''''''''''
Dieses sind schräg gestellte Hochkommata: ````````````

Letzte Änderung: 27.10.2014
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel