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?

$@, $*