Auf dieser Seite finden sich mehrere kleine Beispielprobleme, anhand derer man erste Shell-Erfahrungen sammeln kann.
Musterlösungen finden sich verlinkt.
Zunächst gilt es, in der eigenen Desktop-Umgebung, eine Shell zu starten.
Unter KDE:
Alt+F2, konsole
Unter Unity/Gnome:
Alt+F2, gnome-terminal
Probiere zunächst die Befehle
ls pwd
und dann
mkdir Safari cd Safari
Was passiert hier bei den einzelnen Schritten?
Zu Übungszwecken wurden für diese Shell-Safari Testordner erstellt.
Lade nun den ersten mit
wget https://pubwiki.fsmpi.rwth-aachen.de/images/4/4f/Kiss-ss14-safari.zip
herunter und entpacke ihn mit
unzip Kiss-ss14-safari.zip
Du hast nun die historischen ersten Ausgaben des Geiers, der unter einer Creative-Commons-Lizenz veröffentlicht wird, im aktuellen Ordner.
Probiere nun
man man ls ls --help
Gebt nun eine sortierte Liste der Geier
aus.
Erstelle nun eine Textdatei <Textdatei>, die eine Liste aller Geier, sortiert nach Dateiname, mit den Informationen
Probiere nun
more <Textdatei> less <Textdatei>
Finde als nächstes die Dateigröße von Geier 153 heraus!
Als nächstes:
cat <Textdatei> cat <Textdatei> | less cat <Textdatei> | grep "153" grep "153" <Textdatei>
Was passiert hier?
Man kann in einer Shell auch tatsächlich Dateien editieren.
Probiere einfach mal
nano <Textdatei>
Es gibt auch weitere Shell-Editoren, z. B. emacs und vim. Welchen man benutzen möchte ist Geschmackssache.
Man kann in einer Shell auch Skripten, d. h. „Makros“ von Shell-Befehlen definieren.
Erstelle als erste kleine Übung eine Datei (mit einem beliebigen Texteditor) des folgenden Inhalts:
#!/bin/bash # Dieses Shell-Skript erstellt einen neuen Unterordner, # wechselt in diesen, lädt ein neues Archiv vom Fachschaftsserver # und entpackt dieses mkdir queken cd queken wget https://www.fsmpi.rwth-aachen.de/pubwiki/images/8/86/Safari_queken.zip unzip Safari_queken.zip
Führe das Skript nun aus!
Lege zunächst eine neue Datei „lines.sh“ mit folgendem Inhalt an:
#!/bin/bash ZEILEN=$(cat $1 | wc -l) echo "Die Datei $1 hat ${ZEILEN} Zeilen."
Wende das Skript an!
Falls du es nicht eh' schon auf dem Rechner hast, installiere jetzt 'pdftk' und 'imagemagick' mit
sudo apt-get install pdftk imagemagick
Unter Umständen weiß man, dass man einen Befehl oft mit bestimmten Parametern aufrufen wird. Nehmen wir das Beispiel 'ls'. Wenn wir wissen, dass wir regelmäßig vollständigere Informationen (Parameter '-l') als reine Dateinamen wollen werden, die Dateigröße immer human-readable ('-h') sein soll und wir das Ganze immer in Farbe ('–color') sehen wollen, bräuchten wir immer wieder den Befehll
ls -lh --color
Da wäre es doch eigentlich schön, dafür einen „Shortcut“ zu haben.
Es gibt solche Shortcuts. Sie heißen Aliase.
Probiere zunächst in deiner Shell den Aufruf von
alias lsall="ls -lh --color"
und dann
lsall
Weiterhin haben wir schon gesehen, dass man in Shell-Skripten mit Variablen arbeiten kann. Angenommen, wir wollen immer wieder den aktuellen Pfad wiederfinden können. Dann bietet es sich an zu definieren:
QUEKEN="$(pwd)"
Nun kann man von überall auf dem Dateisystem direkt zu diesem Pfad wechseln.
Probiere nun, in der Shell deine öffentliche IP-Adresse herauszufinden!
Eine mögliche Lösung:
wget <__yamdwe_nowiki>0</__yamdwe_nowiki> -O - 2>/dev/null | grep "Current IP Address" | cut -d ":" -f 2- | sed 's#</body></html>##g' | sed 's/ //'
Wie kann man hierfür einen Shortcut anlegen?
TIPP:
Das Stichwort heißt Shell-Void.
Wir haben nun Variablen, Aliase und Shell-Voids kennengelernt und benutzt. Allerdings bleiben diese nicht dauerhaft gesetzt, wenn wir sie lediglich in die Shell eintippen. Wird die aktuelle Shell beendet, sind auch diese nützlichen kleinen Abkürzungen weg. Außerdem stehen sie auch in keiner anderen Instanz der Shell zur Verfügung.
Wie können Aliase, Variablen und Voids dauerhaft eingerichtet werden?
Gehe nun mit
cd ..
wieder in den Safari-Ordner und besorge dir das nächste ZIP-Archiv!
cd cplusplus wget https://www.fsmpi.rwth-aachen.de/pubwiki/images/1/14/Safari_cplusplus.zip unzip Safari_cplusplus.zip
Hier liegen drei kleine C++-Programme.
Als nächstes schaue dir das Programm 'sequenziell.cpp' an und berechne mit seiner Hilfe die geometrische Reihe $\sum\limits_{k=0}^{10^8} 0,5^k!$
Nun werfe einen Blick in das Programm 'parallel.cpp'!