Bash-Skripting Linux-Kurs der Unix-AG

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 A...
Author: Sabine Straub
3 downloads 1 Views 220KB Size
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