105.1 Shell, Scripting

Ähnliche Dokumente
Crashkurs Kommandozeile

Bash-Skripting Linux-Kurs der Unix-AG

Bash-Skripting Linux-Kurs der Unix-AG

Shell-Scripting Linux-Kurs der Unix-AG

Shell-Scripting Linux-Kurs der Unix-AG

Die Shell. Ein Vortrag von Frederik und Michael 1 / 35

Shell-Scripting Linux-Kurs der Unix-AG

Bash-Scripting Linux-Kurs der Unix-AG

Shell-Scripting Linux-Kurs der Unix-AG

Übersicht Shell-Scripten

Linux und Shell-Programmierung Teil 5

Grundbefehle. LPI Zertifizierung. Auf dem Weg: Certified Linux

Shell. Oder Konsole suchen im Application Finder. Auch Terminal, Bash oder Kommandozeile genannt. Bash nimmt Befehle entgegen und führt diese aus

Skripte. Beispiel. M. Fyta Computergrundlagen 73/93

Allgemeines. Shell Programmierung Unix. Kommentar. Vorgangsweise. Mag. Thomas Griesmayer

Arbeiten in der Unix-Kommandozeile

Arbeiten in der Unix-Kommandozeile

Shellkurs Shell, SSH, Skripte... Justus Pfannschmidt, Carola Bothe, Samuel Domiks Freie Universität Berlin

SHELL WE BEGIN? EINE EINFÜHRUNG IN DIE SHELL. Max Rosin - ANKÜNDIGUNGEN

pwd mkdir Zeigt das aktuelle Verzeichnis an Beispiel: pwd

Einführung in die Kommandozeile

Computer & GNU/Linux Einführung Teil 4

UNIX Die wichtigsten Befehle

Vorbemerkung. Allgemeines zu Shell Scripts. Aufruf. Einfaches Beispiel

Einführung Unix Shell

Grundlagen der Programmierung

Korn-Shell: Einführung in Shellscripte 1. Übersicht: Einführung - 2. Die Kornshell im Detail - 3.Grundlagen der Programmierung

Teil 1: Einführung in die Shell. Was ist die Shell? Wichtige Kommandos (1) Einführung in die Shell. Grundlagen der Shell-Programmierung

Shell-Programmierung

Systemverwaltung mittels Skripts

Shell-Programmierung. von Rolf Schmidt für. LUG Frankfurt

Alles, was man auf der Kommandozeile eingeben kann, kann man auch in einem Skript verwenden. Umgekehrt gilt das gleiche.

: Linux als PPP-Client konfigurieren

Linux Kommandozeile: Einfache Skripte. 1 Wiederhohlung. 2 Einfache Skripte

Okt 10, 16 17:29 UNIX/Linux Lösung

Unix-Grundkurs 1. Thema heute: Shell-Skripten

Technische Praxis der Computersysteme 1

UNIX/Linux Lösung. Mär 14, 17 20:40 Seite 1/6. Prozeßsynchronisation (was ist das?, wo kommt es vor?, Beispiel?):

Unix-Shells. mehrere Befehle in einer Zeile. bash: Grundlagen. Ein- und Ausgaben umlenken. Befehle: Dateien und Verzeichnisse (1)

Vorlesung Unix-Praktikum

Vorlesung Unix-Praktikum

Arithmetik in der tcsh

Arbeiten in der Unix-Kommandozeile. PeP et al. Toolbox Workshop

Arzu Sanli Ibrahim Canakci

Linux II. Reguläre Ausdrücke Editoren Scripting. 2 Linux II. Linux I II III Res WN/TT NLTK XML Weka E Reguläre Ausdrücke Editoren Scripting

Linux Prinzipien und Programmierung

Vorlesung Unix-Praktikum

Arbeiten mit der Shell Teil 1

Zugriffsrechte. anzeigen lassen mit dem Befehl: ls -l

Linux und Shell-Programmierung Teil 6

LPI 102 Shell, Scripting, Programmieren und Administrative Tätigkeiten

Linux-Einführung Übung

Technische Praxis der Computersysteme I 3. Vorlesung

ZWEITE ÜBUNG ZUR EINFÜHRUNG IN DIE PROGRAMMIERUNG FÜR COMPUTERLINGUISTEN LEONIE WEIßWEILER

Arbeiten mit der Shell Teil 1

1.103 Grundlagen der Dateibearbeitung mit vi

Vorlesung Unix-Praktikum

Okt 02, 17 12:28 UNIX/Linux Lösung

X Anmelden am System. X System herunterfahren. X Grundlegendes zur Shell. X Das Hilfesystem. X Dateioperationen. X Bewegen im Verzeichnisbaum

Unix/Linux Grundlagen für Einsteiger

2 2. Tag. 2.1 Das Dateisystem. das Dateisystem organisiert die Speicherung von Daten. viele Betriebssysteme haben verschiedene Dateisysteme

Computer & GNU/Linux Einführung Teil 2. Simon Haller iis.uibk.ac.at

Luis Kornblueh. May 22, 2014

Arbeiten mit der Shell Teil 1

Linux - a bit advanced

Arbeiten mit der Shell Teil 1

Da einige Befehle gerne in Vergessenheit geraten werden hier einige essentielle und nützliche Befehle aufgelistet.

Grundlagen der Shellskript-Programmierung

Betriebssysteme I WS 2016/17. Prof. Dr. Dirk Müller. 5 Shell-Programmierung

105.3 SQL-Datenverwaltung

Literatur. Einführung in Unix. Login. Passwort. Mag. Thomas Griesmayer. Benutzererkennung und Passwort Case-Sensitiv Prompt

1.1 Shellprozeduren. 1.2 einfachste Skript Beispiele

Einführung in die Kommandozeile

Schleifen und Arrays Javakurs

(Unix) Shell Programmierung

SelfLinux Dateien unter Linux

Transkript:

LPI Zertifizierung 105.1 Shell, 105.2 Scripting Copyright ( ) 2006-2009 by Dr. W. Kicherer. This work is licensed under the Creative Commons Attribution- Noncommercial-Share Alike 2.0 Germany License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.0/de/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

Shell Aufgaben der Shell: Interaktive Eingabe von Kommandos Stellt Umgebungsvariablen zur Verfügung bietet eine Programmiersprache Bekannte Shells: Bourne Shells (Steve Bourne) sh, bash C Shells (ähnlich zu C) csh, zsh, ksh

Variablen Siehe auch 1.103.1 (Command Line) Shell Variablen variable=wert Alle mit set anzeigen Umgebungs Variable Exportieren mit export Alle mit env anzeigen Wichtige Umgebungsvariablen PATH, HOME, TERM, USER

PATH Beispiel: berkely:~#echo $PATH /usr/sbin:/usr/bin:/sbin:/bin:/usr/local/sbin:/usr/local/bin berkely:~# Bedeutung von PATH: Wird ein Befehl ohne Pfadangabe aufgerufen, dann sucht die BASH in der Reihenfolge der Angaben in der Variablen $PATH nach diesem Befehl. Wird die BASH fündig, bricht sie die weitere Suche ab. Wird die BASH nicht fündig, erscheint eine Fehlermeldung, dass der Befehl nicht gefunden wurde.

alias Wie kann man Schalter, welche man immer haben möchte einfach verwenden? Alias $ alias rm='rm i' rm (remove) wird nun immer beim löschen nachfragen. $ alias more='less' anstatt more wird nun immer less ausgeführt. $ alias lsps='ls l;ps' Anzeigen aller Aliases $ alias Löschen eines Aliases $ unalias lsps

Funktionen Wie kann man aliases mit eigenen Parametern erzeugen? => function $ function lsps() { > ls l $1 > ps aux grep $1 > } $ $ lsps /usr/sbin/apache2 Die Variable $1 enthält den Wert des ersten Parameters, der übergeben wurde. Das Wort function kann auch weggelassen werden. Funktionen können auch bei der Skriptprogrammierung verwendet werden ( > siehe später) Auch Funktionen müssen evtl. exportiert werden (export lsps). Achtung: $ function cd() { cd $1;ls l; } Hier wird Rekursion verwendet, d.h. cd ruft sich selbst auf!!! Besser: function cd() { builtin cd $1; ls l; }

Konfiguration Login Shell Shell wurde über den Login Prozess gestartet. Reihenfolge der verwendeten Konfigurationsdateien einer Login Shell: 1. /etc/profile 2. ~/.bash_profile 3. ~/.bash_login (nur wenn ~/.bash_profile nicht vorhanden) 4. ~/.profile (nur wenn ~/.bash_login nicht vorhanden) Reihenfolge der verwendeten Konfigurationsdateien einer NoLogin Shell: 1. /etc/bashrc 2. ~/.bashrc (wird z.b. bei jedem Aufruf eines Skripts verwendet, oder wenn ein xterm geöffnet wird) Beim Abmelden: ~/.bash_logout (z.b. Aufruf von clear)

skeleton Automatisches Anlegen der Konfigurationsdateien in den Homes: Wird ein neuer Benutzer mit useradd m angelegt (siehe 107.1 Benutzer anlegen), dann wird der Inhalt des Verzeichnisses /etc/skel (Skeleton) in das neue Homeverzeichnis des Benutzers kopiert. => Die Dateien ~/.bash_profile; ~/.bash_login; ~/.profile; ~/.bashrc; ~/.bash_logout können also in /etc/skel abgelegt werden und werden dadurch automatisch jedem Benutzer beim Anlegen zugewiesen.

Tastenverbindungen Mit der Datei ~/.inputrc kann man Tasten neu definieren. Sie wird beim Starten der bash ausgewertet. # Datei.inputrc Control t: "top \C m" Nun wird bei Ctrl t der Befehl top ausgeführt (\C m => Control m => Return). Für alle User: /etc/inputrc (Details: info rluserman)

Aufgaben Ist cp i, rm i und mv i in Ihrem System als alias gesetzt? Setzen Sie dir als Alias von ls l! Bei Eingabe von lsdp USER sollen alle offenen Dateien ( > lsof) und Prozess ( > ps) des Users USER angezeigt werden! Welche Einstellungen werden in Ihrer No Login Shell gesetzt? Welche Einstellungen werden in Ihrer Login Shell gesetzt? Beim Abmelden soll der Inhalt des Terminals gelöscht werden!.

Scripte Mit Hilfe von Skripten kann man einfache Routineaufgaben automatisieren. Beispiele: einfaches Backup Skript einfache Manipulation an allen Home Verzeichnissen (Cache löschen, Konfiguration einspielen,...)...

Scripte Ausführen eines Skripts: bash script (Skrip in neuer Umgebung ausführen) source script (Skript in aktueller Umgebung ausführen) script (entspricht bash script) dann muss in der ersten Zeile der Script Datei #!/bin/bash (bzw. der Pfad zum Interpreter) stehen und die Datei das x Recht haben (Shebang Zeile). SUID und GUID Bits sind in neuerer Zeit in Scripten wirkungslos!. script (entspricht source script) (siehe Anmerkungen oben)

Variablen Zuweisung zu einer Variablen: neu=hallo Variable ohne $, keine Leerzeichen vor/nach = Verwendung: echo $neu Variable mit $! Variable löschen: unset neu Rechnen mit Ganzzahlen: let a=1000/100 Möchte man mit Fließkommazahlen arbeiten, bietet sich bc an, z.b. mit c=`echo $a + $b bc` Kommandosubstitution erg=$(ls l) oder erg=`ls l` (Backticks) In der Variablen $erg befindet sich nun das Ergebnis des Befehls ls l.

Variablen Vordefinierte Variablen: $0 Dateiname des Skripts $1 $9 Übergebener Parameter ($1 => erster, $9 => 9. Parameter), weitere mit ${10} ${99} $# Anzahl der übergebenen Parameter $* Alle übergebene Parameter ( $1 $2 $3... ) in Einem $@ Alle übergebene Parameter ( $1 $2 $3...) getrennt $? Fehlercode des letzten Befehls/Scripts $$ Prozess ID, wird benutzt um eindeutige Filenamen zu erzeugen $! Prozess ID des zuletzt gestarteten Hintergrund Prozesses

Variablen shift: Der Befehl shift schiebt die übergebenen Parameter, so dass danach in $1 steht, was in $2 war, dort wiederum was in $3 war usw. Beispiel: Aufruf:./test 10 hallo wort => $1 >10, $2 >hallo, $3 >wort shift => $1 >hallo, $2 >wort

if Fallunterscheidungen mit if: if [ Bedingung ] ; then Kommandos elif [ Bedingung ] ; {optional} then Kommandos else {optional} Kommandos fi Wichtig: Leerzeichen um [ bzw. ].

Bedingungen Bedigungen werden mit test bzw. [ ] untersucht: Vergleiche: string1 = string2 Gleichheit string1!= string2 Ungleichheit Schalter: d Directory Directory? f Datei Datei? n String Stringlänge > 0? o oder a und weitere, siehe man Page von test.

if Beispiel: #!/bin/bash pfad=$1 dateien=$(ls $pfad) fehler=$? if [ $fehler!= 0 ] ;then echo "Fehler" $fehler else echo $dateien fi

Mehrfachauswahl Mehrfachauswahl mit case: case $1 in regex1) Kommando ;; regex2) Kommando ;;... *) Default esac => Verwendung in Menüauswahl, bzw. für Schalter, siehe auch die Dateien in /etc/init.d/...

While Schleife while [ Bedingung ] ; do Kommando done => Solange Bedingung wahr (== 0) ist, wird die Schleife ausgeführt. Verwendet man anstatt while => until, muss die Bedingung falsch (!= 0) sein. break beendet die Schleife vorzeitig. continue beendet den Schleifendurchgang und startet die Schleife, nun mit einer evtl. anderen Bedingung.

For Schleife for VARIABLE in LISTE ; do Kommandos done => Die Variable VARIABLE nimmt bei jedem Schleifendurchgang den nächsten Wert aus der Liste an. Beispiel: For v in hallo ade tschuess ; do echo $v done

For Schleife Klassische Zählschleife mit dem Komando seq seq letzte seq erste letzte seq erste schritt letzte In der For Schleife for VARIABLE in seq ERSTE LETZTE ; do Kommandos Done Beispiel for i in $(seq 10 2 20); do echo $i done

sonstiges Einlesen von Variablen: read VARIABLE Beenden des Skripts Automatisch nach dem letzten Befehl exit EXITWERT Mails versenden echo "Es gab einen Fehler" mail s "Fehler" root mail s "Betreff" EMPFAENGER < TEXTFILE mail s "BETREFF" EMPFAENGER <<EOM Hier ein Text, auch mit Variablen wie $variable und ueber viele viele Zeilen. Es darf nur nicht die Zeichenkombination nach << enthalten sein! EOM

Schreiben Sie ein Shell Skript, das 2 Zahlen addiert (add 23 + 17). Wenn keine 3 Parameter angegeben wurden, soll das Programm eine Hilfe ausgeben. Schreiben Sie ein Shell Skript, das nach obigem Muster nicht nur addieren sondern auch subtrahieren, multiplizieren und dividieren kann. Das Script soll die Größte von 3 Zahlen ausgeben. Es soll in ein neues Verzeichnis gewechselt werden. Wenn das Verzeichnis nicht existiert, soll ein Fehler ausgegeben werden. Schreiben Sie ein Programm endlos, das endlos läuft. Schreiben Sie zu obigem endlosen Programm ein start/ stop Script. Hinweis: Über die Variable $! die PID von endlos in einer Datei speichern und mit kill stoppen. Aufgaben

Aufgabe Worin liegt der Unterschied in der Ausgabe der beiden unten stehenden Programmteile? (erst überlegen, dann Ausprobieren!) for wort in "$*" do echo $wort done for wort in "$@" do echo $wort done