Shellprogrammierung
Informatik, 4. Semester
Informatik, 4. Semester
Kartei Details
Karten | 68 |
---|---|
Sprache | Deutsch |
Kategorie | Informatik |
Stufe | Universität |
Erstellt / Aktualisiert | 23.03.2017 / 18.07.2021 |
Weblink |
https://card2brain.ch/box/20170323_shellprogrammierung_qLMT
|
Einbinden |
<iframe src="https://card2brain.ch/box/20170323_shellprogrammierung_qLMT/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
Worauf wird in der Magic Line verwiesen?
Auf den Interpreter, mit dem die Script-Datei ausgeführt werden soll.
Was passiert, wenn die Magic Line fehlt?
Dann wird die Shell zur Interpretation genutzt, aus der das Script gestartet wurde.
Warum sollte man die Magic Line in ein Script einfügen?
Sie hilft dem Betriebssystem, direkt den richtigen Interpreter für das Script zu finden und so richtig mit der Datei umzugehen.
--> Portabilität tu anderen Systemen, nach Update ändert sich Default Shell, etc.
Wie sieht eine Magic Line aus, die festgelegt, dass die bash genutzt werden soll?
#!/bin/bash
Wie kann ein Script als "ausführbar" gekennzeichnet werden?
- mit der Magic Line, die den Interpreter angibt
- mit "chmod" (change mode) werden Ausführungsrechte gesetzt
Was ist die Bedeutung der Variable $$?
Sie enthält die Prozess-ID der aktuellen Shell-Instanz.
Was ist die sogenannte Kommandosubstitution? Nennen Sie ein Beispiel und erklären Sie, warum man Kommandosubstitution einsetzen sollte?
- zwei Anwendungen:
- Ausgabe eines Kommandos wird in Variable gespeichert
- Ausgabe eines Kommandos wird für ein weiteres Kommando verwendet
- Bsp.: echo Wir befinden uns gerade im Verzeichnis `pwd`
- Mit Kommandosubstitution wird es erst möglich, das Ergebnis eines Kommandos in einer Variablen abzuspeichern statt eine Ausgabe auf dem Bildschirm (bzw. in einer Datei) vorzunehmen.
Wie lautet der Befehl, um laufende Prozesse anzeigen zu lassen?
ps
Wie lautet der Befehl zur Auflistung der bisher eingegebenen Kommandos?
history
Wie lautet der Befehl zum Kopieren von Dateien?
cp
Wie lautet der Befehl zum Umbennen / Verschieben von Dateien?
mv
Wie lautet der Befehl zum Anlegen eines Verzeichnisses?
mkdir
Wie lautet der Befehl zum Löschen von Dateien?
rm
Wie lautet der Befehl zur Anzeige des aktuellen Arbeitsverzeichnisses?
pwd
Wie lautet der Befehl zur Ausgaben eines Texts?
echo
Wie lautet der Befehl zum Schreiben eines Texts in eine Datei?
echo text > datei (überschreibt Inhalt der Datei)
echo text >> datei (hängt an Datei an)
Wie lautet der Befehl zur Ausgabe des Inhalts einer Datei?
cat
Wie lautet der Befehl zum Beenden eines Scripts mit einem Rückgabewerts?
exit
Wie lautet der Befehl zum Verlassen einer Funktion mit einem Rückgabewert?
exit n, return n
Was ist hier der Fehler?
if [-z $1 ]; then echo $1; fi
Es fehlt ein Leerzeichen nach der "[".
Was passiert beim nachfolgenden Befehl?
touch {a..c}.txt
Es werden drei Dateien erzeugt: a.txt, b.txt, c.txt.
Schauen Sie sich die folgenden Befehle an:
EIngabe: ls --> Ausgabe: a.dat b.dat backup.sh c.dat d.dat d.txt e.dat e.txt scripter.sh test.sh test2.sh
EIngabe: for i in * .dat; do echo $i; done --> Ausgabe:???
Was gibt die for-Schleife aus?
a.dat b.dat c.dat d.dat e.dat
Sind die folgenden Variante des Befehls identisch?
1) for i in * .dat; do echo $i; done
2)
for i in * .dat
> do
> echo $i
> done
Ja, Semikolon entspricht Zeilenumbruch.
Was ist ein Alias?
Mit einem Alias teilt man dem System mit, dass ein Befehl auch unter einem anderen Namen ausgeführt werden soll. Wird ein benutzt, dann setzt die bash zuerst den zugeordneten Inhalt ein und macht danach weiter mit der Verarbeitung.
Wie legen Sie ein Alias an, das dem Befehl "du" immer die Option "-sch" mitgibt?
alias du='du -sch'
Mit welchen beiden Befehlen lässt sich näheres über einen Befehl herausfinden (zum Beispiel der Typ)?
type, which
Warum ist der Befehl "echo bla > output.txt" gleichbedeutend zu "echo bla 1> output.txt"?
Bei beiden Befehlen wird die Ausgabe von echo in die Datei output.txt umgeleitet. Hier wird praktisch der Kanal 1 oder genauer der Filedeskriptor 1 für die Standardausgabe in entsprechende Ausgabedatei umgeleitet. Die Angabe der 1 ist jedoch optional.
Was passiert hier: "befehl >output.log 2 >&1"? (Nennen Sie auch die Datenströme)
Die Ausgabe von "befehl" wird von stdout (Standdardausgabe) in die Datei "output.log" umgeleitet. Diese Datei wird immer neu erstellt bzw. ihr Inhalt überschrieben. Fehlermeldungen von stderr (Standardfehlerausgabe) werden ebenfalls in diese Datei umgeleitet. 2>&1 bedeutet also soviel wie „schreibe die Ausgabe von Kanal 2 (stderr) dorthin, wo die Ausgabe von Kanal 1 (stdout) geschrieben wird“.
Was passiert hier: "befehl1 | befehl2"? (Nennen Sie auch die Datenströme)
Ein Kommando kann, wenn es Daten über stdin empfangen kann, auch die Daten eines anderen Kommandos empfangen und weiterverarbeiten. Dazu wird der Pipe-Operator ("|") genutzt. Standardnäßig wird nur stdout an die Pipe weitergeleitet.
Hier wird die Ausgabe von "befehl2" an "befehl1" weitergeleitet.
Wo können Funktionen, Variablen und Aliasse hinterlegt werden, um Sie in jeder Shell-Sitzung verfügbar zu machen?
.bashrc
Mit welchem Befehl können Funktionen oder Variablen in aufgerufenen Skripten verfügbar gemacht werden?
Funktionen: export -f Funktionsname
Variablen: export Variablenname
Warum sind Variablen und Funktionen nicht automatisch in aufgerufenen Skripten verfügbar?
Weil sie nicht in der "Umgebung" stehen. Jede neue Shell-Instanz erbt nur die Variablen und Funktionen, die explizit mit export wurden.
Was steckt hinter dem Platzhalter "~"?
Home-Verzeichnis
Über die Variablen "$1" bis $9" kann man auf die ersten neun übergebenen Parameter zugreifen. Welche Möglichkeit bietet die bash, um auf die nachfolgenden Parameter zugreifen zu können?
- Abfrage aller Parameter jeweils über ${n}
- Liste aller Parameter: $@ oder $* --> “for arg in “$@”(Hier stehen alle Parameter drin)
Was ist der Unterschied zwischen touch datei und echo > datei?
Mit "touch datei" wird eine Datei angelegt, mit "echo > datei" wird in eine Datei geschrieben.
Warum muss ein Script normalerweise so gestartet werden: "./scriptname"?
"." repräsentiert das aktuelle Verzeichnis. Dieses muss angegeben werden, da der aktuelle Pfad nicht in der Liste der erlaubten Suchpfade (PATH) steht.
Wie kann ein Script auch ohne Ausführrechte ausgeführt werden?
Aufruf des Interpreters mit dem Skriptnamen als Argument: bash scriptname
Was wäre eine gute Möglichkeit, um ein Script nicht über "./scriptname" starten zu müssen?
Man kann das Skript, nachdem es ausführbar gemacht wurde, in einen Ordner (z.B. ~/bin/) verlinken oder verschieben, welchen man der Umgebungsvariablen $PATH bekannt macht.
Schauen Sie sich das folgende Script an. Was passiert hier (und warum)?
Eingabe: hallo () {echo "hallo welt";}
Eingabe: alias hallo='echo "HALLO WELT"'
Eingabe: hallo
Ausgabe: HALLO WELT
Eingabe: \hallo
Ausgabe: hallo welt
Eingabe: hallo () {echo "hallo welt";} # Funktion "hallo" wird definiert. Sie gibt "hallo welt" aus.
Eingabe: alias hallo='echo "HALLO WELT"' # Es wird ein Alias namens "hallo" definiert, welches für das Kommando echo "HALLO WELT" stehen soll.
Eingabe: hallo # Der Alias "hallo" wird aufgerufenen. Dabei setzt die bash den zugeodneten Inhalt ein und macht dann mit der Verarbeitung weiter.
Ausgabe: HALLO WELT # Die Ausgabe lautet "HALLO WELT".
Eingabe: \hallo # Die Funktion "hallo" wird aufgerufen". Durch das "\" weiß die Shell, dass nicht der gleichnamige Alias gemeint ist.
Ausgabe: hallo welt # Die Ausgabe lautet "hallo welt".
In welcher Variable sind alle übergebenen Parameter enthalten?
$@, $*