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
Wortlisten sind eine bash-Erweiterung
nicht in der Bourne-shell sh möglich
Beispiele
echo*
echoch*
echoch*.*
echo???
echo???*
echoch[0-9].*
echo[0-9A-Za-z]*
echo*.[ch]
#--------------------
echoxxx>-r
rm-r# ???
echoxxx>-rf
rm-rf# ???
#--------------------
echofile{1,2,3}
echofile{1a,1b,1c}
echofile{1,2,3}.{c,h}
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.
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.
Ein- und Ausgabeumlenkung
> datei
Standardausgabe in eine Datei schreiben
>> datei
Standardausgabe an eine Datei anhängen
< datei
Standardeingabe aus einer Datei lesen
Beispiele
sort>sort.out
sort>>sort.out
sort<sort.input
sort<sort.input>sort.out
#--------------------
sort<file# Unterschiede
sortfile# ???
wctmp>tmp# Resultat
pipes
pipes
Röhren
direkte Verbindungen zwischen der Ausgabe eines Programms
und der Eingabe eines 2. Programms
Syntax
cmd1 | cmd2
Implementierung
ein FIFO Puffer im Betriebssystem
mit Synchronisation
Beispiele
ls>tmp
wc-l<tmp
rmtmp
#--------------------
ls|wc-l
ls-l--time-style=long-iso|sort-k 6,7 -r|more
Interpretation
von pipe-Kommandos:
cmd1 | cmd2
Diagramm
.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
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
wie bei 'text'
nur $, \ und `...`
werden interpretiert
Variablensubstitution
ein Zeichen maskieren
Kommando-Aufrufe
`cmd`
schräg gestellte Hochkommata:
Auswertung von Kommandos
auf Parameterposition
$(cmd)
Alternative zu `cmd`
Vorteil: Schachtelung ist möglich
Beispiele
greptitle `find . -name'*.html'-print`
greptitle$(find . -name'*.html'-print)
echo `date`
echo$(date)
echo$(echodate)
echo$(echo$(date))
# Alternative zu grep ... $(find ...)
find . -name'*.html'-print0|xargs-0 -egrep-ntitle
manxargs# kann nuetzlich sein
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.
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: ````````````