Theorie | Beispiel | Shell Befehle | Aufgaben
Theoretische Zusammenfassung:
Ein Shell-Befehl kann entweder von der Kommandozeile aufgerufen werden, oder kann
man ihn in eine Befehlsdatei (shell script) einschreiben und dann diese Datei laufen
lassen. Eine Befehlsdatei ist eine ASCII Datei, worauf das Ausführungsrecht erlaubt ist
(mit dem "chmod 755 Dateiname" Befehl), und enthaltet Shell Befehle.
Charaktere, womit die Befehle getrennt werden können:;, &&,
||, <CR>
Kommentar kann man nach dem # Charakter schreiben. Am Anfang der Datei können wir ein
spezielles Kommentar schreiben, womit der Kommandointerpreter ausgewählt werden kann.
In unserem Fall kann das das folgende sein:
#!/bin/bash.
Beispiel Ein Shell-Script, das die folgende
Aufgabe löst:
Schreiben Sie eine Befehlsdatei, die zwei Parameter bekommt: ein Verzeichnisname (d)
und eine Zahl (n).
Für jede Datei des gegebenen Verzeichnisses und dessen Unterverzeichnisses, für welche
der Benutzer Lese- und Ausfüfhrungsrechte hat, zeigen Sie die erste n Zeilen am
Bildschirm an.
Inhalt der Datei shell1: ---------------------------------------------------------------------------------- #!/bin/bash # wir überprüfen ob wir 2 Parameter in der Kommandozeile haben; $# -> Anzahl der Parameter aus der Kommandozeile if [ ! $# -eq 2 ] then echo usage: shell1 dir nr exit 1 fi # wir überprüfen ob der erste Parameter ein Verzeichnisname ist if [ ! -d $1 ] then echo $1 ist kein Verzeichnisname\! exit 1 fi # Der Befehl 'find $1 -perm -u=rx -type f' zeigt jede Datei des Verzeichnisses $1 und # dessen Unterverzeichnisse, für welche der Benutzer (u) Lese- (r) und Ausführungsrecht # (x) hat. # Anm.: Der Befehl könnte auch folgenderweise geschrieben werden: # find $1 -perm -500 -type f # eine Alternative für den find Befehl ist der Befehl test mit Optionen -f, -r, -x # die Wirkung der umgekehrten Apostrophe `...` ist, daß der zwischen diesen Apostrophen # liegende find Befehl wird mit dessen Ausgabe vertauscht (versuchen Sie den Befehl # 'find $1 -perm -u=rx -type f' von der Kommandozeile auszuführen, so können Sie dessen # Ausgabe anschauen). # Bei der Ausführung des for Befehls wird die Zyklusvariable Datei der Reihe nach # die Zeile der Ausgabe des find Befehls als Wert annehmen. for Datei in `find $1 -perm -u=rx -type f` do echo $Datei # wir zeigen den Dateinamen am Bildschirm an head -$2 $Datei # wir geben die erste $2 Zeilen der Datei aus done ------------------------------------------------------------------------------------ WICHTIG: Nachdem Sie das Script geschrieben haben, vergissen Sie nicht darauf Ausführungsrecht zu geben (chmod 755 Dateiname)!!! Ausführung: [user@linux user]$./shell1 [Parameter] Es kann auch ohne './' ausgeführt werden, wenn der PATH Variable das aktuelle Verzeichnis (also '.') enthaltet.
1. Scheiben Sie ein Shell Script, das auf das aktuelle Verzeichnis und dessen
Unterverzeichnisse für alle Benützer Schreibrecht gibt.
2. Scheiben Sie ein Shell Script, das für jede Textdatei des aktuellen Verzeichnisses und dessen Unterverzeichnisse die letzte Zeile löscht.
3. Scheiben Sie ein Shell Script, das als Parameter ein Verzeichnisname bekommt. Es wird jede C Quellcode von diesem Verzeichnis gelöscht, dann wird der sortierte Inhalt jeder ASCII Datei von diesem Verzeichnis am Bildschirm angezeigt.
4. Scheiben Sie ein Shell Script, das Benutzernamen von der Standardeingabe (Tastatur)
einliest (diese werden also nicht als Parameter gegeben). Nach jeder eingabe soll
das Script die letzte 3 Anmeldungen dieses Benutzers im aktuellen Monat anzeigen.
Wenn der Benutzer in diesem Monat noch nicht angemeldet war, soll das Script den Text
”Benutzer x war noch nie angemeldet.” ausgeben.
5. Scheiben Sie ein Shell Script, das für jeden, im System existierenden Benutzer,
zeigt deren Benutzername, den vollständigen Namen, und das Heimatverzeichnis an.
(diese Informationen findet man in der /etc/passwd Datei)
6. Scheiben Sie ein Shell Script, das als Parameter ein Verzeichnisname bekommt,
und bezeichnet die Anzahl der Zeilen für jede Textdatei von diesem Verzeichnis
und dessen Unterverzeichnisse. Last uns annehmen, dass im gegebenen Verzeichnisse
gibt es nur Texdateien.
7. Scheiben Sie ein Shell Script, das als Parameter zwei Dateinamen bekommt. In der
ersten gibt es Benutzernamen, in der zweiten ein beliebiger Text. Das Script wird für
jeden Benutzer der ersten Datei ein E-Mail schicken, dessen Text der Inhalt der zweiten
Datei ist.
8. Scheiben Sie ein Shell Script, das die Anzahl der Prozeße des, als Parameter gegebenes
Benutzers angibt.
9. Scheiben Sie ein Shell Script, das für jeden, im System angemeldeten Benutzer zeigt
am Bildschirm den vollständigen Namen und der Arbeitsplatz, woher er sich angemeldet hat, an.
10. Scheiben Sie ein Shell Script, das den Inhalt des aktuellen Verzeichnisses in 3
verschiedenen Formen anzeigt:
– alphabetisch, nach dem Dateinamen geordnet
– nach dem Datum der letzten Änderung geordnet
– nach der Dateigröße geordnet