Bash-Skripting Linux-Kurs der Unix-AG
Sebastian Weber 13.06.2012
Was ist ein Bash-Skript? I I I
Skript muss mit chmod +x ausführbar gemacht sein Aneinanderreihung von Befehlen „normale“ Befehle nutzbar
Sebastian Weber
Bash-Skripting
13.06.2012
2 / 19
Was ist ein Bash-Skript? I I I
Skript muss mit chmod +x ausführbar gemacht sein Aneinanderreihung von Befehlen „normale“ Befehle nutzbar
Einfache Beispiele 1 2
# !/ bin / bash echo " Hello , ␣ World ! " I
I
echo Argument gibt das Argument an die Standardausgabe aus echo -n Argument gibt das Argument ohne Zeilenumbruch aus
Sebastian Weber
Bash-Skripting
13.06.2012
2 / 19
Was ist ein Bash-Skript? I I I
Skript muss mit chmod +x ausführbar gemacht sein Aneinanderreihung von Befehlen „normale“ Befehle nutzbar
Einfache Beispiele 1 2
# !/ bin / bash echo " Hello , ␣ World ! " I
I
1 2 3
echo Argument gibt das Argument an die Standardausgabe aus echo -n Argument gibt das Argument ohne Zeilenumbruch aus
# !/ bin / bash cd .. ls
Sebastian Weber
Bash-Skripting
13.06.2012
2 / 19
I
1
# !/ bin / bash I
1
Standard-Nutzer-Shell in Debian
# !/ bin / sh I
1
#! gibt an, mit welchem Programm das Skript ausgeführt werden soll
In manchen System das selbe wie /bin/bash verweist in Debian auf /bin/dash
# !/ bin / dash I
Kann weniger als /bin/bash
Sebastian Weber
Bash-Skripting
13.06.2012
3 / 19
Variablen Shellvariable I I I
wird mit Variable=Wert definiert kann durch $Variable aufgerufen werden löschen mit unset
Sebastian Weber
Bash-Skripting
13.06.2012
4 / 19
Variablen Shellvariable I I I
wird mit Variable=Wert definiert kann durch $Variable aufgerufen werden löschen mit unset
Umgebungsvariable I I I
Weitergabe an Kindprozesse Definition durch: export VARIABLE Mit export -n wird aus einer Umgebungsvariable wieder eine Shellvariable
Sebastian Weber
Bash-Skripting
13.06.2012
4 / 19
Programmparameter I I I I I
Programme werden mit ./programm aufgerufen es können Parameter angegeben werden Diese werden mit $1, $2... aufgerufen $* ruft alle Parameter auf $# steht für die Anzahl der Parameter
Sebastian Weber
Bash-Skripting
13.06.2012
5 / 19
Exit-Status I I I I I I
I
Programme können mit oder ohne Fehler beendet werden Kein Fehler bedeutet Rückgabewert 0 „Fehler“ erzeugen einen Rückgabewert größer 0 Kann mit $? ausgelesen werden Kann durch exit Wert gesetzt werden (Bsp. exit 33) Code hinter && wird nur ausgeführt, wenn der erste Befehl „erfolgreich“ war Code hinter || nur, wenn der erste Befehl nicht „erfolgreich“ war
Sebastian Weber
Bash-Skripting
13.06.2012
6 / 19
test I I I I I
test stellt fest, ob eine Bedingung wahr ist -e file (exists) wahr, wenn die Datei existiert -r file (readable) wahr, wenn die Datei lesbar ist -x file (executable) wahr, wenn die Datei ausführbar ist -d file (directory) wahr, wenn die Datei ein Ordner ist
Sebastian Weber
Bash-Skripting
13.06.2012
7 / 19
test I I
s1 = s2 wahr, wenn der String s1 identisch mit s2 ist s1 != s2 wahr, wenn sie nicht identisch sind
Sebastian Weber
Bash-Skripting
13.06.2012
8 / 19
test I I
I I
I I
n1 -eq n1 -ne sind n1 -gt n1 -ge ist n1 -lt n1 -le
Sebastian Weber
n2 (equal) wahr, wenn n1 und n2 gleich sind n2 (not-equal) wahr, wenn n1 und n2 nicht gleich n2 (greater then) wahr, wenn n1 größer als n2 ist n2 (greater equal) wahr, wenn n1 größer gleich n2 n2 (lower then) wahr, wenn n1 kleiner als n2 ist n2 (lower equal) wahr, wenn n1 kleiner gleich n2 ist
Bash-Skripting
13.06.2012
9 / 19
test I
I
I I I
exp1 -a exp2 wahr, wenn Ausdruck1 UND Ausdruck2 wahr sind exp1 -o exp2 wahr, wenn Ausdruck1 ODER Ausdruck2 wahr sind [] macht das selbe wie test [ $? -eq 0 ] wahr, wenn Rückgabewert gleich 0 Leerzeichen zwischen den Klammern und Befehlen sind wichtig!
Sebastian Weber
Bash-Skripting
13.06.2012
10 / 19
for-Schleifen for i in XXX do Befehl done
1 2 3 4
I I
I
XXX kann eine Liste oder ein Befehl sein Befehle müssen ‘befehl‘ oder $(befehl) geschrieben werden for i in $* geht alle Parameter durch, alternativ for i
Sebastian Weber
Bash-Skripting
13.06.2012
11 / 19
Beispiele 1 2 3 4 5 6
1 2 3 4 5
1 2 3 4 5
# !/ bin / bash liste = ’1 2 3 ’ for i in $liste do echo $i done # !/ bin / bash for i in ‘ seq 1 3 ‘ do echo $i done # !/ bin / bash for i in ‘ls ‘ do test -d $i && echo " $i ␣ ist ␣ ein ␣ Ordner " done
Sebastian Weber
Bash-Skripting
13.06.2012
12 / 19
while/until-Schleifen 1 2 3 4
while Bedingung do befehl done I
1 2 3 4
Die Schleife wird wiederholt, solange die Bedingung wahr ist
until Bedingung do befehl done I
Die Schleife wird wiederholt, bis die Bedingung wahr ist
Sebastian Weber
Bash-Skripting
13.06.2012
13 / 19
if-Bedingung 1 2 3 4 5 6 7 8 9
if Bedingung then Befehl elif Bedingung # elseif ist optional then # wird von elif benoetigt Befehl else # else ist optional Befehl fi I
I I I
Die Befehle hinter if werden ausgeführt, wenn die Bedingung wahr ist bzw. Rückgabewert 1 liefert Ansonsten wird der Befehl hinter else ausgeführt elif bedeutet else if else und elif sind optional
Sebastian Weber
Bash-Skripting
13.06.2012
14 / 19
1 2 3 4 5 6 7 8 9 10 11
case $var in Wert1 ) Befehl ;; Wert2 | Wert3 ) Befehl ;; * ) Befehl ;; esac I
I I
case schaut in diesem Fall nach, ob die die Variable var mit dem Wert1 bzw Wert2 oder Wert3 übereinstimmt * fängt alle noch nicht geprüften Werte ab Wenn case eine Übereinstimmung findet wird der nachfolgende Befehl ausgeführt
Sebastian Weber
Bash-Skripting
13.06.2012
15 / 19
I I I
; ist ein Befehlstrennzeichen. & schiebt den Befehl in den Hintergrund \ lässt die Zeile in der nächsten Zeile weitergehen
1
if [ 1 - lt 2 ] ; then echo " hallo " ; fi
3
if [ 1 - lt 2 ] then echo " hallo " fi
4 5
7 8 9 10
if [ 1 - lt 2 ] then echo \ " hallo " fi I
source Datei bzw . Datei liest die Datei ein, als ob sie dort stehen würde
Sebastian Weber
Bash-Skripting
13.06.2012
16 / 19
größere Programme 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# !/ bin / bash echo Was ist das richtige Ergebnis ? echo -n " 2+2= " while true do read i if [ $i - eq 4 ] then echo " richtig ! " break else echo " falsch ! " sleep 10 echo -n " 2+2= " fi done
Sebastian Weber
Bash-Skripting
13.06.2012
17 / 19
nützliche Dinge I
I I I
I
read wartet auf eine Eingabe ins Terminal. Wird mit Enter bestätigt read -s liest die Eingabe ohne sie anzuzeigen sleep 10 wartet 10 Sekunden ab let Ausdruck bzw $((Ausdruck)) wertet den Ausdruck arithmetisch aus let x++ bzw x=$((x+1)) erhöht x um eins
Sebastian Weber
Bash-Skripting
13.06.2012
18 / 19
Unterprogramme 1 2 3
funktion () { Befehl } I
1 2 3 4
Die Funktion function ist danach mit function im Programm aufrufbar
inkrement () { let $1 ++ } inkrement a I
der Parameter a der Funktion inkrement wird um 1 erhöht
Sebastian Weber
Bash-Skripting
13.06.2012
19 / 19