Irina Deines Alexander Grinberg - HSRMweber/sysprog/proj08/shell_prog.pdf · 2008. 7. 7. ·...

Post on 14-Oct-2020

2 views 0 download

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??