Irina Deines Alexander Grinberg - HSRMweber/sysprog/proj08/shell_prog.pdf · 2008. 7. 7. ·...
Transcript of Irina Deines Alexander Grinberg - HSRMweber/sysprog/proj08/shell_prog.pdf · 2008. 7. 7. ·...
Shell-Programmierung
Irina Deines
Alexander Grinberg
Alexander GrinbergIrina Deines
24. Juni 2008 2
AgendaEinleitung
Was ist eine Shell?Shells im VergleichWofür Shellprogrammierung
Shellprogrammierung MetazeichenDatenströmeBefehlsformenQuotingVariablenArithmetik
Alexander GrinbergIrina Deines
24. Juni 2008 3
AgendaProgrammablaufkontrolle
KontrollstrukturenSchleifenFunktionen
Eingabe und AusgabeAliasUnix-Tools
awkbc und dc
Quellen
Alexander GrinbergIrina Deines
24. Juni 2008 4
Was ist eine Shell?
bildet die Schnittstelle zwischen dem Kernel und dem Benutzer
sorgt für eine Kommunikation mit dem System interpretiert Benutzerbefehle –> Kommandointerpreter
Einsatzgebiete einer Shell:Systemadministrationbei alten Rechnern (ohne grafische Benutzeroberfläche)
Alexander GrinbergIrina Deines
24. Juni 2008 5
Shells im Vergleich
Anfang der 70er hat das erste UNIX-System die Thompson-Shell
wird von der Bourne-Shell 1978 als Standardshell abgelöstparallel dazu gibt es Entwicklungen anderer Shells
Seit 1987 gibt es eine Weiterentwicklung der Bourne-Shell: Bourne-Again-Shell (Bash)!!! Unterteilung der Shells in 2 Familien
Bourne-Familie: sh, ksh, bash und zshC-Shell-Familie: csh, tcsh
Alexander GrinbergIrina Deines
24. Juni 2008 6
Shells im Vergleich Leistungsmerkmal ksh bash tcshNamensexpansion x x xNamensvervollständigung x x xEin- und Ausgabenumlenkung x x xasynchrone Prozesse x x xJobkontrolle x x xHistory x x xKommandozeileneditor x x xTippfehlerkorrektur xLogin-Dateien x x xLogout-Dateien xAlias x x xShell-Funktionen x xarithmetische Operationen x x xFeldvariablen x xSignalbehandlung x x x
Alexander GrinbergIrina Deines
24. Juni 2008 7
Wofür Shellprogrammierung?
1. wiederkehrende Kommandos zusammenfassenz.B. Zusammenfassen von Kommandos
2. Programme zur Erledigung von Aufgaben schreibenz.B. Skript, das das E-Mail-Fach auf neuen Eingang überprüft
Alexander GrinbergIrina Deines
24. Juni 2008 8
Bash-Programmierung
Shellskripte sind ausführbare Dateiensie werden nicht kompiliert, sondern interpretiert
die erste Zeile weist auf die interpretierende Shell hin #!/bin/bash, #!/bin/sh etc.
Kommentare beginnen mit # eine Zeile wird ab der Raute nicht von der Shell interpretiert
Alexander GrinbergIrina Deines
24. Juni 2008 9
Metazeichen - Dateinamenexpansion
Interpretation von Metazeichen erfolgt vor der Ausführung des Befehls. stößt die Shell auf *, ? oder [] ([abc], [a-q], [!f-h]) interpretiert sie die Zeichenkette als Muster für Dateinamen
echo *.txt
ls file?.dat
echo file[0-9].txt
Alexander GrinbergIrina Deines
24. Juni 2008 10
Metazeichen - Tildeexpansion
mit ~ kommt der Benutzer zum Homeverzeichnis~name -> Homeverzeichnis des Benutzers name~+ -> aktuelles Verzeichnis ~- -> vorheriges Verzeichnis
Backslash hebt die Sonderbedeutung eines Metazeichens auf
Alexander GrinbergIrina Deines
24. Juni 2008 11
Datenströme3 Kanäle: stdin (Deskriptor 0), stdout (Deskriptor 1) und stderr (Deskriptor 2)
Befehl > Datei Umlenkung von stdout von Befehl in DateiBefehl 2> Datei Umlenkung von stderr von Befehl in Datei
Befehl >&n
Befehl m>&n
Befehl > Datei 2>&1
Befehl > Datei1 2> Datei2 stdout in Datei1 und stderr in Datei2Befehl >&- schließt stdoutBefehl >> Datei stdout von Befehl am Ende von Datei anfügeBefehl 2>> Datei stderr von Befehl am Ende von Datei anfüge
stdout von Befehl wird an Dateideskriptor n übergebenAusgabe von Befehl, die an Deskriptor m geht, wird an Deskriptor n übergeben lenkt stdout und stderr von Befehl in Datei um
Alexander GrinbergIrina Deines
24. Juni 2008 12
Datenströme
Befehl < Datei
Befehl <&-
Befehl << Wort
Befehl | Datei
stdin für Befehl wird aus Datei gelesen
Befehl <&n stdin für Befehl wird von Dateideskriptor n übernommen
Befehl m<&n Eingabe, die von Dateideskriptor m kommt, wird aus Dateideskriptor n übernommenschließt stdinHere-Document: stdin für Befehl ist Text bis Wortstdout von Befehl1 wird an stdin von Befehl 2 übergeben
Alexander GrinbergIrina Deines
24. Juni 2008 13
Befehlsformen
Befehl & Befehl wird im Hintergrund ausgeführtBefehl1 ; Befehl2 Befehle werden nacheinander ausgeführt
(Befehl1; Befehl2)
`Befehl`
Befehl1 && Befehl2
Befehl1 || Befehl2
Befehle werden gruppiert in einer Subshell ausgeführt und erzeugen eine gemeinsame AusgabeKommandosubstitution: führt Befehl aus und ersetzt `Befehl` durch stdout von BefehlBefehl2 wird nur bei Erfolg von Befehl1 ausgeführt (AND)Befehl2 wird nur bei Nicht-Erfolg von Befehl1 ausgeführt (OR)
Alexander GrinbergIrina Deines
24. Juni 2008 14
Quoting
Möglichkeit, Sonderbedeutung von Metazeichen und Befehlen zuzulassen bzw. aufzuheben2 Möglichkeiten:
1. Backslash vor das Metazeichen2. Zeichenkette in Apostrophe (') oder Anführungszeichen ('') setzen
'' lassen die Interpretation von $, \, und ` (Backsticks) zualle Metazeichen in ' verlieren ihre Spezialbedeutung
Alexander GrinbergIrina Deines
24. Juni 2008 15
Quoting - Beispiele
user$ echo "`pwd`"/local/useruser$ echo "pwd"pwduser$ echo '* ACHTUNG *'* ACHTUNG *user$ dir="$PWD/dir"user$ echo "dir:'$dir'"dir:'/autofs/student/idein001/dir'user$ var=17user$ echo "Variable:\$var Wert:$var"Variable:$var Wert:17user$ ls 'ab* $var'
Alexander GrinbergIrina Deines
24. Juni 2008 16
Variablen
müssen nicht deklariert werden per default ist der Variablentyp eine Zeichenkette
Variablennamen können aus Buchstaben, Ziffern und Unterstrichen bestehen, dürfen nicht mit einer Zahl beginnen Inhalt einer Variablen: $Variablenname
Ersetzung der Variablen durch ihren Inhalt erfolgt vor der Ausführung eines Befehls
Alexander GrinbergIrina Deines
24. Juni 2008 17
Variablen - Definition
globale Variablen = Umgebungsvariablenwerden nach dem Start eines Kommandos oder einer Shell weitergegeben
Ausdruck Bedeutung
Zeigt alle globalen Variablen an.
Zeigt sowohl globale als auch lokale Variablen an.
a=3
a hat den Wert 3 und ist lokal.declare a=3
let a=3declare -x a=3
a hat den Wert 3 und ist global.export a=3
export a a wird zu einer globalen Variable.local a=3 Definiert a als lokal. Nur in Shell-Funktionen möglich.exportprintenv
settypeset
unset a Variable a wird gelöscht.
Alexander GrinbergIrina Deines
24. Juni 2008 18
Variablen - Definition
bei declare können Variablen Attribute mitgegeben werden
mit - Attribut setzen, mit + Attribut löschen:a Feldattributi Integer-Attributr Leseattributx export-Attribut
mit -p kann man sich alle Attribute anzeigen lassen
Alexander GrinbergIrina Deines
24. Juni 2008 19
Variablen - Beispieleuser$ cat new.shdeclare -r r=77echo $rr=12echo "$r"user$ bash new.sh77new.sh: line 3: r: readonly variable77
user$ cat new.shdeclare -i -r help=123declare -p helpuser$ bash new.shdeclare -ir help="123"
user$ declare -i a=3user$ b=3user$ a=a+buser$ b=a+buser$ echo $a " " $b6 a+b
Alexander GrinbergIrina Deines
24. Juni 2008 20
Vordefinierte VariablenVariable Bedeutung
$*
$@
$# Anzahl der Aufrufparameter.$?
$PWD aktuelles Verzeichnis$OLDPWD vorheriges Verzeichnis$PATH Pfad, in dem nach ausführbaren Kommandos gesucht wird.
$n Aufrufparameter mit der Nummer n; 0 <= n <= 9Alle Aufrufparameter in einem String.Alle Aufrufparameter, wobei jeder ein separater String ist.
Rückgabewert des letzten Kommandos.
mit shift [n] die Werte der Aufrufparameter ''nach links'' verschieben
nach dem 9. Parameter: ${10}, ...
Alexander GrinbergIrina Deines
24. Juni 2008 21
Globale Variablenbeim Start eines Programms wird eine Subshell gestartet
Nachteil: Umgebungsvariablen in beiden Shells sind unabhängig voneinanderLösung: Aufruf des Programms mit Punkt und Leerzeichen vor Programmname
user$ cat new.shPATH=$PATH":"`pwd`user$ echo $PATH/usr/java/latest/bin:/usr/java/latest/binuser$ bash new.shuser$ echo $PATH/usr/java/latest/bin:/usr/java/latest/binuser$ . new.shuser$ echo $PATH/usr/java/latest/bin:/usr/java/latest/bin:/user/ShellProg
Alexander GrinbergIrina Deines
24. Juni 2008 22
Variablen-Substitution
Ausdruck Bedeutung
${Variable}
${Variable:-Wert} Falls Variable belegt: deren Inhalt, sonst Wert
${Variable:=Wert}
${Variable:?Wert}
${Variable:+Wert} Falls Variable belegt ist, wird deren Wert ausgegeben.
${#Variable}
Inhalt von Variable. Die Klammern müssen nur angegeben werden, wenn nach Variable eine Zahl, ein Buchstabe oder ein Unterstrich folgen.
Falls Variable belegt: deren Inhalt, sonst: Rückgabe Wert und Variable bekommt Wert zugewiesenFalls Variable belegt ist: deren Inhalt, sonst: Wert ausgegeben und die Shell beendet.
Anzahl der in Variable gespeicherten Zeichen, 0 falls Variable leer ist.
Alexander GrinbergIrina Deines
24. Juni 2008 23
Variablen-Substitution – Beispiele
user$ cat new.shvar=Irinecho Guten Tag, $varaecho Guten Tag, ${var}auser$ bash new.shGuten Tag,Guten Tag, Irina
user$ cat new.shecho ${var:-Nicht Gesetzt}var=Irinaecho ${var:-Nicht Gesetzt}user$ bash new.shNicht GesetztIrina
user$ cat new.shecho $varecho ${var:=Irina}echo $varuser$ bash new.sh
IrinaIrina
Alexander GrinbergIrina Deines
24. Juni 2008 24
ArithmetikBash interpretirert jede Zeile als String
Spezielle Syntax zur Auswertung arithmetischer Ausdrücke: $((ausdruck))
Operator Bedeutung-, + Vorzeichen!, ~ logische und bitweise Negation*, /, % Multiplikation, Division, Modulo+, - Addition, Subtraktion<<, >>
<=, >=, <, >
==,!= Test auf Gleichheit und Ungleichheit&, ^, | bitweises AND, XOR und OR&&, || logisches AND und OR
Links- und RechtsschtiftVegleichsoperatoren
Zuweisungs-operatoren: =, *=, /=,
%=, +=, -=,
<<=, >>=, &=,
^=, |=
Alexander GrinbergIrina Deines
24. Juni 2008 25
Arithmetik
beginnt eine Zahl mit 0 wird sie als Oktal- mit 0x als Hexadezimalzahl interpretiert
user$ cat new.sha=12b=3var=$((12-34+$a-$b))echo $varecho $((4+9))echo $((2+$((3*4))))user$ bash new.sh-131314
user$ cat new.sha=$((010))b=$((10))c=$((0x10))echo $a $b $cuser$ bash new.sh8 10 16
Alexander GrinbergIrina Deines
24. Juni 2008 26
Arithmetiklet erlaubt arithmetische Auswertungen für mehrere Ausdrücke:
let ausdruck1 audruck2 ausdruck3 ...
Folgende Operatoren sind erlaubt: -, +, *, /, **, %
user$ cat new.sh#!/bin/bashlet a=2+3 b=a**2 c=b%7 d=$((34+(-2+1)))echo $a $b $c $duser$ bash new.sh5 25 4 33
Fließkommazahlarithmetik ist nur möglich mit bc- oder dc-Rechner
Alexander GrinbergIrina Deines
24. Juni 2008 27
Kontrollstrukturen – if
Syntax:
if Bedingung1then
Befehl1[elif Bedingung2then
Befehl2]...[else
Befehl3]fi
Geht auch als Einzeiler: if [Bedingung]; then Befehl;fi
Alexander GrinbergIrina Deines
24. Juni 2008 28
Bedingungen mit Zeichenketten
Ausdruck BedeutungLänge von s1 ist ungleich 0.
[[ ''$s1'' == ''$s2'' ]] s1 und s2 sind identisch.
[[ ''$s1'' != ''$s2'' ]]
[[ ''$s1'' < ''$s2'' ]]
[[ ''$s1'' > ''$s2'' ]]
[[ -n ''$s1'' ]]
[[ -z ''$s1'' ]] Länge von s1 ist 0 oder s1 existiert nicht.
s1 und s2 sind nicht iden-tisch.s1 ist alphabetisch kleiner als s2.s1 ist alphabetisch größer als s2.
Alexander GrinbergIrina Deines
24. Juni 2008 29
Bedingungen mit Zeichenkettenuser$ cat new.sh#!/bin/basha=Zeichenif [[ "$a"=="Array" ]]then
echo Jaelse
echo Neinfiif [[ "$a" == "Array" ]]then
echo Jaelse
echo Neinfiuser$ bash new.shJaNein
Alexander GrinbergIrina Deines
24. Juni 2008 30
Bedingungen Logische Operatoren: !, && und ||
user$ cat new.sh#!/bin/basha=Zeichenb=Arrayif [[ "$a" == "Zeichen" && "$b" == "Array" ]]then
echo Jaelse
echo Neinfiuser$ bash new.shJa
Bedingung in Zeile 5 kann auch lauten: if [[ ''$a'' == ''Zeichen'' ]] && [[ ''$b'' == ''Array'' ]]
Alexander GrinbergIrina Deines
24. Juni 2008 31
Kontrollstrukturen - caseSyntax:
case Wert in Muster1) Befehl1a;
Befehl1b;; Muster2) Befehl2;;...
esac
user$ cat new.sh#!/bin/bashf=Irinacase "$f" in
Anna)echo Anna $f;;Inga)echo Inga $f;;Irina)echo Irina $f;;
esacuser$ bash new.shIrina Irina
Alexander GrinbergIrina Deines
24. Juni 2008 32
Schleifen – for
Syntax: for Variable [ in Liste]do
Befehledone
Geht auch als Einzeiler: for Variable [in Liste]; do Befehle; done
Liste kann sein: a b c, *.bck, $var, ${array[*]}, $*
Alexander GrinbergIrina Deines
24. Juni 2008 33
Schleifen - Beispieleuser$ cat new.sh#!/bin/bashfor N in EINS ZWEI DREIdo
echo "N hat jetzt den Wert $N"doneuser$ bash new.shN hat jetzt den Wert EINSN hat jetzt den Wert ZWEIN hat jetzt den Wert DREI
user$ cat new.sh#!/bin/bashfor Ndo
echo "N hat jetzt den Wert $N"doneuser$ bash new.sh EINS ZWEI DREIN hat jetzt den Wert EINSN hat jetzt den Wert ZWEIN hat jetzt den Wert DREI
Alexander GrinbergIrina Deines
24. Juni 2008 34
Schleifen - Beispiele
user$ cat new.sh#!/bin/bashls -lfor N in *do
chmod 700 $Ndonels -luser$ bash.shinsgesamt 12drwxr-xr-x 2 idein001 students 4096 19. Jun 14:38 dir-rw-r--r-- 1 idein001 students 65 21. Jun 16:27 new.sh-rw-r--r-- 1 idein001 students 68 21. Jun 15:58 new.sh~insgesamt 12drwx------ 2 idein001 students 4096 19. Jun 14:38 dir-rwx------ 1 idein001 students 65 21. Jun 16:27 new.sh-rwx------ 1 idein001 students 68 21. Jun 15:58 new.sh~
Alexander GrinbergIrina Deines
24. Juni 2008 35
Schleifen – while u. until
solange Bedingungzutrifft
while Bedingung;do
Befehledone
solange Bedingung nicht zutrifft
until Bedingung;do
Befehledone
Alexander GrinbergIrina Deines
24. Juni 2008 36
Schleifen - Beispiele
user$ cat new.sh#!/bin/bashN=1while $(( $N <= 3 ))do
echo "N hat jetzt den Wert $N"N=$(($N+1))
doneuser$ bash new.shN hat jetzt den Wert 1N hat jetzt den Wert 2N hat jetzt den Wert 3
user$ cat new.sh#!/bin/bashN=1until $(( $N == 3 ))do
echo "N hat jetzt den Wert $N"N=$(($N+1))
doneuser$ bash new.shN hat jetzt den Wert 1N hat jetzt den Wert 2
Alexander GrinbergIrina Deines
24. Juni 2008 37
Schleifen
Beispiele für Endlosschleifen: while true;
while : ;
while [1];
while (( a == a ));
zum Abbruch eines Schleifendurchlaufs:continue [n]
zum Abbruch der ganzen Schleife:break [n]
Alexander GrinbergIrina Deines
24. Juni 2008 38
Funktionen
fname { kdoliste;}
..............
fname arg1 arg2 .........
Funktinen sind nur in der Shell bekannt, in der sie definiert wurden. Soll eine Funktion auch an Subshells exportiert werden, muss der entsprechende Funktionsname mit export –f in der Environment-Datei definiert werden.
Alexander GrinbergIrina Deines
24. Juni 2008 39
Funktionen
In Bash ist es möglich, funktionslokale Variablen mit dem builtin-Kommando local zu deklarieren. Bash-Funktionen können auch rekursiv aufgerufen werden. Ein- und Ausgabeumlenkung ist sowohl bei der Definition als auch beim Aufruf einer Shell-Funktion erlaubt.
Alexander GrinbergIrina Deines
24. Juni 2008 40
Funktionen
user$ cat new.sh#!/bin/bashmult (){
let ergebnis=$(($1*$2))echo $ergebnis
}mult 2 3newergebnis=`mult 3 4`
echo $newergebnisuser$ bash new.sh612
Alexander GrinbergIrina Deines
24. Juni 2008 41
Funktionenschwierig zwei Rückgabewerte zu bekommen:
user$ cat new.sh#!/bin/bashmultundadd1 (){
let ergebnis1=$(($1*$2))let ergebnis2=$(($1+$2))
}multundadd1 2 3echo $ergebnis1 $ergebnis2
user$ bash new.sh6 5
Alexander GrinbergIrina Deines
24. Juni 2008 42
Funktionenuser$ cat new.sh#!/bin/bash#oder bessermultundadd2 (){
let erg1=$(($1*$2))let erg2=$(($1+$2))echo $erg1 $erg2
}declare -a arr=(`multundadd2 3 4`)echo ${arr[0]} ${arr[1]}
user$ bash new.sh12 7
Alexander GrinbergIrina Deines
24. Juni 2008 43
Funktionen
Für die Wahl eines Funktionsnamens gelten die gleichen Regeln wie für die Wahl von Datei- und Variablennamen
Gleiche Funktions und Shellvariablen-Namen sind erlaubt.
return bewirkt das Verlassen einer Funktion
Alexander GrinbergIrina Deines
24. Juni 2008 44
Funktionen
Die in der gerade aktiven bash definierten Funktionen können mittypeset –f oder mit declare -f
angezeigt werden.Mit
unset -f fname
kann die Definition wieder gelöscht werden.
Alexander GrinbergIrina Deines
24. Juni 2008 45
Ausgabe mit echohat folgende Parameter:
-n unterdrückt den Zeilenumbruch am Ende der Ausgabe-e aktiviert die Interpretation von Steuerzeichen (sog. Escape-Sequenzen) (\t,\n,\c,\a)
String muss in '' gesetzt werden
user$ cat new.sh#!/bin/bashN="Beispiel"echo -e "$N \t Tabs \n Neue Zeile \c das ist ausgeblendet"echo -n "Ohne neue Zeile,"echo " noch ohne neue Zeile"user$ bash new.shBeispiel TabsNeue Zeile Ohne neue Zeile, noch ohne neue Zeile
Alexander GrinbergIrina Deines
24. Juni 2008 46
Ausgabe mit printfSyntax: printf format arg1 arg2 ...
Formatzeichen Bedeutungs St ringc ASCII-Zeichend Dezimalzahli Integerf Fließkommazahl
e
u vorzeichenloser Integer
o
x
Fließkommazahl in e-Notat ion
vorzeichenlose Oktalzahlvorzeichenlose Hexadezimalzahl
user$ cat new.sh#!/bin/bashN="Beispiel"a=1printf "%-20s %s \n" $N $auser$ bash new.shBeispiel 1
Alexander GrinbergIrina Deines
24. Juni 2008 47
Eingabe mit read
liest Eingaben von stdin und weist sie Variablen zuread var1 var2 ...
Rückgabewert ist 0, es sei denn ein Timeout oder EOF tritt ein
user$ cat new.sh#!/bin/bashread a b cecho "\$a:$a \$b:$b"echo "\$c:$c"user$ bash new.sherster zweiter$a:erster $b:zweiter$c:
weniger Worte gelesen als Variablennamen angegeben: Variable bleibt leermehr Worte gelesen als Variablennamen angegeben: letzte Varible bekommt den Rest der Eingabezeile
Alexander GrinbergIrina Deines
24. Juni 2008 48
Eingabe - Beispieluser$ cat new.sh#!/bin/bashwhile truedo
read aif [[ "$a" == "q" ]]then
breakfiecho \'$a\' ist kein
qdoneuser$ bash new.shkjkfjbl'kjkfjbl' ist kein qq
erste Zeile aus einer Datei lesen:
user$ cat new.sh#!/bin/bashread a < new.shecho \'$a\'user$ bash new.sh'#!/bin/bash'
Alexander GrinbergIrina Deines
24. Juni 2008 49
Eingabe - Beispiel
ganze Datei auslesen mit: while read var; do ...; done < datei
#!/bin/bashi=1while read a[$i]do
i+=1done < new.shj=1while (( j < i ))do
echo ${a[$j]}j+=1
done
Alexander GrinbergIrina Deines
24. Juni 2008 50
Alias
Alias sind so etwas wie Mini-Funktionen, die keine Parameter kennen.
Man hinterlegt einen Befehl in einer Art Variablen, dem Alias, und benutzt fortan diesen Alias als Kürzel, um Zeit beim Eintippen zu sparen.
Mit dem Kommando alias können entweder Alias definiert oder aber momentan definierte Aliase angezeigt werden.
Alexander GrinbergIrina Deines
24. Juni 2008 51
Alias
alias [name=[befehl]]
!!! Vor und nach dem Gleichheitszeichen darf kein Trennzeichen angegeben sein. !!!
agrin001@fozzie:~/Sys$ alias d='date'agrin001@fozzie:~/Sys$ d -RThu, 19 Jun 2008 17:28:31 +0200agrin001@lx2-06:~/Sys$ alias d= 'date'bash: alias: date: not found
Alexander GrinbergIrina Deines
24. Juni 2008 52
Alias
agrin001@fozzie:~/Sys$ alias info='date; hostname; pwd'agrin001@fozzie:~/Sys$ infoThu Jun 19 17:28:43 CEST 2008fozzie/local/agrin001/Sysagrin001@fozzie:~/Sys$ aliasalias d='date'alias info='date; hostname; pwd'
Alexander GrinbergIrina Deines
24. Juni 2008 53
Alias
Mit dem Befehl unalias wird ein solcher gelöscht.unalias [name].
Ist die Option –a möglich, um alle Aliase auf einmal zu löschen.
agrin001@fozzie:~/Sys$ unalias infoagrin001@fozzie:~/Sys$ aliasalias d='date'
agrin001@fozzie:~/Sys$ unalias-aagrin001@fozzie:~/Sys$ aliasagrin001@fozzie:~/Sys$
Alexander GrinbergIrina Deines
24. Juni 2008 54
Alias
[befehl] kann ein beliebiger Text (einer Kommandozeile) sein. Wenn das letzte Zeichen von wert ein Leer- oder Tabulatorzeichen ist, dann prüft die Bash bei der Alias-Substitution auch noch das dem Alias folgende Wort daraufhin, ob es sich dabei um ein Alias handelt, das substituiert werden muss. Allgemein sollte immer dann ein Alias-Text mit einem Leer- oder Tabulatorzeichen enden, wenn einem Alias ein weiteres Alias folgen kann.
Alexander GrinbergIrina Deines
24. Juni 2008 55
awk
Das ist eine Programmiersprache (Skriptsprache) zur Bearbeitung und Auswertung einfacher Textdaten.
awk wird in erste Linie dazu verwendet, Zeilen in einzelne Felder oder Wörter zu zerlegen, um gezielt auf bestimmte Daten innerhalb der Zeilen zuzugreifen.
Alexander GrinbergIrina Deines
24. Juni 2008 56
awkSys$ cat new.sh#!/bin/bashecho eins zwei | awk '{print $1}'echo eins zwei | awk '{print $2}'echo eins zwei | awk '{printf "%s %s\n",$1,$2}'Sys$ bash new.sheinszweieins zwei
Alexander GrinbergIrina Deines
24. Juni 2008 57
awk
Es verfügt über zahlreiche Stringsverarbeitungs- und mathematischesche Funktionen, mit denen man die Daten weiter aufbereiten und manipulieren kann; außerdem Variablen, Arrays, if- und Schleifen-Konstrukte und sogar über die Möglichkeit, eigene Funktionen zu definieren.
Wie schon gesagt ist awk selbst eine Programmiersprache, die in bash-Skripten verfügbar ist.
Alexander GrinbergIrina Deines
24. Juni 2008 58
bc und dc
Manchmal braucht man Nachkommazahlarithmetik. Es ist möglich nur mit bc- oder dc-Rechner.
Leider stellen für Bash Nachkommazahlen nur Strings dar und der „normale“ Umgang mit ihnen ist in jedem Fall unmöglich.
Alexander GrinbergIrina Deines
24. Juni 2008 59
bc und dcuser$ cat new.sh#!/bin/basha=$(echo "1.2*2"|bc)Echo $aecho $(($a+1)) #Das ist Falsch: a ist fuer Bash nur ein String.user$ bash new.sh2.4new.sh: line 4: 2.4+1: syntax error in expression (error token is ("4+1."
Alexander GrinbergIrina Deines
Beispielprogramm
Alexander GrinbergIrina Deines
Quellen
Patrick Ditchen: Shell-Skript ProgrammierungRonald Schaten: Shell-ProgrammierungMichael Kofler: Linux - Installation, Konfiguration, AnwendungHelmut Weber: Praktische Systemprogrammierunghttp://www.pronix.de/pronix-996.html
Alexander GrinbergIrina Deines
Vielen Dank für Ihre Aufmerksamkeit!
Sind noch Fragen offen??