Skripte Flashcards

1
Q

Welche spezielle Bash-Variable enthält den Namen des Skripts, samt Pfad, das aktuell ausgeführt wird?

A

$0

Wenn das Skript beispielsweise unter /pfad/zum/skript/mein_skript.sh gestartet wurde, wird $0 den Wert /pfad/zum/skript/mein_skript.sh enthalten.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Eine Skriptdatei namens do.sh ist ausführbar, und der symbolische Link undo.sh zeigt
darauf. Wie könnten Sie aus dem Skript heraus erkennen, ob der aufrufende Dateiname do.sh
oder undo.sh lautet?

A

Die spezielle Variable $0 enthält den Dateinamen, bzw vollständigen Pfad, mit dem das Skript aufgerufen wurde.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Welche spezielle Bash-Variable enthält eine Liste aller Argumente, die an das aktuelle Skript übergeben wurden ?

A

$*
$@

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Welche spezielle Bash Variable enthält die Anzahl der Argumente die an das Skript übergeben wurden ?

A

$#

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Welche spezielle Bash Variable enthält die PID des zuletzt ausgeführten Hintergrundjobs ?

A

$!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Welche spezielle Bash Variable enthält die PID der aktuellen Shell ?

A

` $$`

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wie heißt die erste Zeile eines Scripts für /bin/bash ?

A
#! /bin/bash

Shebangzeile

Wird ein Skript ausgeführt, sorgt die Shebangzeile (#!) dafür, dass eine neue Shell aufgerufen wird.
Außerdem definiert Sie den Interpreter - also /bin/bash für bash skripte.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Wie können Skripte ausgeführt werden ?

A

bash script.sh (braucht nur Leserechte, erzeugt childshell)

source script.sh (braucht nur Leserechte)
. script.sh
Beim Sourcen wird keine Subshell geöffnet bei Skriptausführung

./script.sh (Datei muss ausführbar sein, erzeugt childshell)

Bei einem Skript mit sehr eingeschränkten Aufgaben kann die SUID-Berechtigung gesetzt sein, so dass auch normale Benutzer das Skript mit Root-Rechten ausführen können.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was macht der command exec ?

A

Wenn Sie innerhalb eines Skripts ein externes Programm oder ein anderes Skript aufrufen wollen und mit diesem Programm oder Skript den aktuell laufenden Prozess ersetzen wollen, können Sie diesem Programm das Kommando exec voranstellen.
Die aufrufende Shell wird dann durch das aufgerufene Programm beendet und ersetzt.

Wenn exec verwendet wird, wird der aktuelle Shell-Prozess durch das Programm ersetzt, das mit exec aufgerufen wird.

Mit anderen Worten, exec tauscht das aktuelle Programm, das du ausführst, mit einem anderen Programm aus, ohne einen neuen Prozess zu starten. Das kann nützlich sein, wenn du beispielsweise ein Skript ausführst und nach Abschluss dieses Skripts möchtest, dass die Shell stattdessen ein anderes Programm ausführt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wie werden in einem Bashscript mehrere Befehle seperiert ?

A

Semikolon (;): Sie können Befehle direkt durch Semikolons trennen. Dadurch werden die Befehle sequenziell ausgeführt, unabhängig davon, ob der vorherige Befehl erfolgreich war oder nicht.
befehl1; befehl2; befehl3


Zeilenfortsetzung mit Backslashes: Wenn Sie eine Befehlszeile auf mehrere Zeilen aufteilen möchten, können Sie den Backslash (\) verwenden. Bash interpretiert dies als eine Zeilenfortsetzung. Zum Beispiel:
echo \
"Dies ist ein langer Text, der auf mehrere Zeilen \
aufgeteilt ist."


Und-Verknüpfung (&&): Sie können Befehle auch mit dem &&-Operator verknüpfen, der sicherstellt, dass der nachfolgende Befehl nur ausgeführt wird, wenn der vorherige erfolgreich war (Exit-Status 0).
befehl1 && befehl2 && befehl3


Oder-Verknüpfung (||): Der ||-Operator verknüpft Befehle und stellt sicher, dass der nachfolgende Befehl nur ausgeführt wird, wenn der vorherige fehlgeschlagen ist
(Exit-Status ungleich 0).
befehl1 || befehl2 || befehl3

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Welche spezielle Bash Variablen enthalten Übergabewerte, die mittels Argument übergeben werden ?

A

$1 bis $9

Alles über 9 muss innerhalb des Skripts mittels geschweifter Klammern referenziert werden…
${10}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Welche spezielle Bash Variable enthält den numerischen Exitstatus des letzten Befehls ?

A

$?

Die Ausgabe von 0 bedeutet, dass das letzte Kommando erfolgreich ausgeführt wurde, alles andere sind Fehlercodes.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Welcher command kann innerhalb eines skriptes verwendet werden, um den Benutzer während der Skriptausführung nach Eingaben zu fragen?
Interaktive prompts.

A

read Varname
Ist der Name der Variablen nicht angegeben, wird standardmäßig der Variablenname REPLY verwendet.

-p gibt die Meldung selbst aus. echo wird daher überflüssig
read -p "Type first name and last name:" NAME SURNAME
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Wie ist die Syntax für eine for Schleife, die mittels Befehlssubstitution die Ausgabe von find in der Variable Z speichert?
Sie soll alle Datein von ~/Documents mit der Endung .old in z speichern und das Ergebnis ausgeben.
Danach soll die Variable z wieder zurückgesetzt werden.

A
for VARIABLE in LIST
do
COMMANDS
done

..
LIST eine beliebige Folge getrennter Begriffe, oder commands (Befehlsubstitution)
..

for z in $(find /home -name \*.old)
do
echo "Hier sind die Daten: $z
done
unset z
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Mit welchem command wird eine Variable Namens SIZES zu einer Array-Variable gemacht ?

A

declare -a SIZES

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Wie wird das erste Element in einer Array Variable Namens SIZES referenziert?

A

echo ${SIZES[0]}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Wie werden mehrere Werte einer Array Variable Namens SIZES zugewiesen ?

A

SIZES=(Wert1 Wert2 Wert3)

Trennzeichen kann sein:
Leerzeichen
Tab
Neuzeile

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Wie werden mehrere Element einer Array Variable Namens FS mittels Befehlsubstitution zugewiesen ?
verwende dazu den command…
cut -f 2 < /proc/filesystems

A

FS=( $(cut -f 2 < /proc/filesystems) )

sofern die Ausgabe des Befehls Leerzeichen, Tab, Neuzeile enthält, werden mehrere Elemente im Array befüllt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Mit welchem command können zwei Variablen, deren Inhalt numerisch ist addiert, bzw potenziert werden ?
Speicher das ergebnis in der variable sum

A
sum=$(expr $var1 + $var2)
oder 
sum=$((var1 + $var2))
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Wie kann man in Bash Skripte überprüfen die Datei/Programm ausführbar ist?
Überprüfe ob /bin/bash ausführbar ist.

A
if test -x /bin/bash; then
oder
if [ -x /bin/bash ]; then
21
Q

Wie ist die Syntax von if

A
if [ -d /bin/bash ]; then
    echo "ist ein Verzeichnis"
elif [ -x /bin/bash ]; then
    echo "ist ausführbar"
else
    echo "Wenn nichts anderes zutrifft"
fi
22
Q

Der Befehl echo fügt nach der Ausgabe des Inhalts automatisch eine neue Zeile ein. Wie kann dieses Verhalten unterdrückt werden ?

A

echo -n

Die Option -n bei echo unterdrückt das automatische Hinzufügen eines Zeilenumbruchs am Ende der Ausgabe.

23
Q

Wie werden die Escape sequenzen aktiviert in einem Bashscript?

A

echo -e

Die doppelten Anführungszeichen müssen bei der Option -e gesetzt sein, da sonst die Sonderzeichen möglicherweise nicht korrekt dargestellt werden.

echo -e "Operating system:\t$OS"
echo -e "Unallocated RAM:\t$(( $FREE / 1024**2 )) MB"
24
Q

Was macht die escape sequenze \n ?

A

new line

25
Q

Was macht die escape sequenze \t ?

A

horizontal tabulator (8 Leerzeichen breit)

26
Q

Was macht die escape sequenze \v ?

A

vertical tabulator (entspricht 8 Leerzeilen)

27
Q

Was macht die escape sequenze \b ?

A

backspace

28
Q

Was macht die escape sequenze \a ?

A

alert (piept einmal)

29
Q

Was macht die escape sequenze \c?

A

unterdrückt die Ausgabe des Newline-Zeichens

30
Q

welcher command ist echo ähnlich ?

A

printf
printf hängt kein Zeilenumbruchzeichen am Ende des Textes an,
daher sollten Sie \n bei Bedarf an das Ende des Musters setzen

31
Q

Welchen command verwenden Sie in Bash skripte für eine interaktive Passwortabfrage?

A
echo "Bitte geben Sie Ihr Passwort ein:"
read -s VARIABLENAME

Der Befehl read -s wird in Bash verwendet, um eine Zeile von der Standardeingabe einzulesen, wobei die Eingabe nicht auf dem Terminal angezeigt wird. Dies ist nützlich, wenn Sie vertrauliche Informationen wie Passwörter eingeben möchten, ohne dass sie auf dem Bildschirm angezeigt werden.

32
Q

In einem System mit einem ordnungsgemäß konfigurierten E-Mail-Dienst sendet der Befehl
mail -s "Maintenance Error" root <<<"Scheduled task error"
die Benachrichtigung per E-Mail an den Benutzer root.

Ein solcher Befehl könnte in unbeaufsichtigten Tasks (z.B. cronjobs) dazu dienen, den Systemadministrator über ein unerwartetes Problem zu informieren.
Schreiben Sie eine if-Anweisung, die den mail-Befehl ausführt, falls der Exit-Status des vorherigen Befehls — wie immer dieser lautet — nicht erfolgreich ist.

A
if [ "$?" -ne 0 ]; then
mail -s "Maintenance Error" root <<<"Scheduled task error"
fi
33
Q

Wie können mittels Test [ …. ] zwei Werte miteinander verglichen werden?

A
WertA -lt WertB      (less than)
WertA -le WertB     (less than or equal to)
WertA -gt WertB     (greater than)
WertA -ge WertB    (greater than or equal to)
WertA -eq WertB    (equal to)
WertA -ne WertB    (not equal to)


Wenn man Variablen vergleicht sollten die in doppelte Anführungszeichen gesetzt werden.
[ "$VAR1" -ne Wert2 ]

File1 -nt File2                (newer than)
File1 -ot File2                (older than)
"$VAR1" -ef "$VAR2"    ( Wahrheitsprüfung) 

#!/bin/bash

if [ Datei1 -ef Datei2 ]; then
    echo "Die beiden Dateien zeigen auf denselben Inode."
else
    echo "Die beiden Dateien zeigen auf unterschiedliche Inodes."
fi

Wenn Datei1 und Datei2 auf dasselbe Gerät und dieselbe Datei oder denselben Link zeigen, gibt test den Wert true (0) zurück. Andernfalls gibt es false (1) zurück.

34
Q

Auf was kann mittels test [ … ] getestet werden ?

A
-r "$VAR"           (readable)
-w "$VAR"          (writable)
-x Filename       (executable)
-d Filename       (directory)
-b Filename       (block device)
-c Filename        (count zeichenorientiertes device)
-g Filename        (SGID-Bit ist gesetzt)
-k Filename        (sicky-Bit ist gesetzt)
-u Filename        (SUID-Bit ist gesetzt)
-e Filename        (exists)
-f Filename         (reguläre Datei (file)
-L Filename        (ist ein symbolischer Link)
35
Q

Was macht
test EXPR1 -o EXPR2

A

Prüft, ob mindestens einer der beiden Ausdrücke wahr ist.

36
Q

Was macht
test EXPR1 -a EXPR2

A

Prüft, ob sowohl EXPR1 als auch EXPR2 wahr sind.

37
Q

Was macht
test ! EXPR

A

Prüft, ob der Ausdruck EXPR falsch ist.

38
Q

Wie lautet die Syntax für case in einem Bash Skript ?

A
#! /bin/bash

echo -e "Gib deine Distribution in Kleinbuchstaben an.\n"
echo -n "Linux Distribution: "
read DISTRO

case "$DISTRO" in

    debian | ubuntu | mint)
        echo -n "the Debian"
        ;;
				
    centoos | fedora | opensuse)
        echo -n "the  RPM"
        ;;
				
    *)
        echo -n "an unknown"
        ;;
				
esac

echo " package format." 


Das case-Statement in Bash ermöglicht es, eine Variable oder einen Ausdruck gegen eine Reihe von Mustern zu prüfen und je nach Übereinstimmung unterschiedliche Aktionen auszuführen.
Jede Liste von Mustern und zugehörigen Befehlen muss mit ;; oder ;& oder ;;& abgeschlossen werden
Das letzte Muster, ein Sternchen, passt, wenn keines der vorherigen Muster dem Suchbegriff entspricht.

39
Q

Wie wird die Gesamtanzahl der Elemente einer array variable ausgegeben ?

A

echo ${#SIZES[*]}
oder
echo ${#SIZES[@]}

40
Q

setze ein schleife mit while die einen Zähler echot der alle 2 Sekunden 1 Zahl hochzählt, bis er bei 10 angekommen ist.

A
#! /bin/bash

zahl=1
while [ $zahl -le 10 ]; do
    echo "Zähler: $zahl"
    sleep 2 && zahl=$((zahl+1))
done

((zahl++)) würde auch gehen.

41
Q

was macht der command
((zahl++))
oder
$((zahl+1))
in einem Bash Skript

A

erhöht die Variable zahl um 1

42
Q

Wie könnte ((zahl++)) mit let übersetzt werden?

A

let zahl=$zahl+1

43
Q

Welche 2 syntax Varianten gibt es von for

A
for VARIABLE in WERT1 WERT2 WERT3
do
    # Befehle, die für jeden Wert in der Liste ausgeführt werden sollen
done

und

for (( IDX = 0; IDX < ${#SEQ[*]}; IDX++ )) 
do
    # Befehle, die für jeden Schleifendurchlauf ausgeführt werden sollen
done

INITIALISIERUNG: Ein Ausdruck, der vor dem Start der Schleife ausgeführt wird, um die Variable zu initialisieren.
BEDINGUNG: Eine Bedingung, die bei jedem Schleifendurchlauf überprüft wird. Die Schleife wird ausgeführt, solange diese Bedingung wahr ist.
INKREMENTIERUNG: Ein Ausdruck, der am Ende jedes Schleifendurchlaufs ausgeführt wird, um die Variable zu ändern.

44
Q

Schleife mit while

A
#!/bin/bash
#Addiert beliebig viele Zahlen

summe=0

while test $# -gt 0
do
let summe=summe+$1
shift
done
echo Die Summe Ihrer Eingaben ist $summe
unset summe
exit 0
45
Q

Was ist der Unterschied zwischen while und for

A

while: Sie wird eingesetzt, wenn die Anzahl der Schleifendurchläufe im Voraus nicht bekannt ist und von einer Bedingung abhängt.

for: Geeignet, wenn eine Anzahl von Schleifendurchläufen im Voraus bekannt ist oder wenn über eine Liste von Elementen iteriert werden muss, wie z.B. die Elemente eines Arrays oder Dateien in einem Verzeichnis.

46
Q

Das folgende Skript soll eine Zahlenfolge von 0 bis 9 ausgeben, liefert stattdessen aber
unendlich oft 0 aus. Was müssen Sie ändern, um die erwartete Ausgabe zu erhalten?

#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]
do
echo $COUNTER
done
A
while [ $COUNTER -lt 10 ]
do
((COUNTER++))
echo $COUNTER
done

oder 

COUNTER=$((COUNTER + 1))
47
Q

Welche spezielle Bash Variable enthält den Exit-Status des zuletzt ausgeführten Befehls oder Skripts ?

A

$?

48
Q

was macht der command
printf ?

A

Der in der Bash eingebaute Befehl printf gibt Ihnen mehr Kontrolle über die Anzeige der Variablen. printf verwendet das erste Argument als Format für die Ausgabe, wobei Platzhalter durch die folgenden Argumente in der Reihenfolge ersetzt werden, in der sie in der Befehlszeile erscheinen.
..
printf "Operating system:\t%s\nUnallocated RAM:\t%d MB\n" $OS $(( $FREE / 1024**2 ))

"Operating sys ... \n" ist das 1. Argument
$OS ist das 2. Argument
Die Befehlssubstitution ist das 3. Argument

%s Platzhalter für Textinhalte
%d Platzhalter für ganzzahlige Werte
..
printf hängt kein Zeilenumbruchzeichen am Ende des Textes an, daher sollten Sie \n bei Bedarf an das Ende des Musters setzen.