forked from blinry/nutsh-vorkurs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path12-wildcards.nutsh
105 lines (83 loc) · 3.04 KB
/
12-wildcards.nutsh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
lesson_name("Wildcards")
make_home
"Wann haben Sie eigentlich das letzte Mal in Ihren Schrank geschaut?"
run(`touch "$ROOT"/schrank/ratte{1..33}`)
prompt {
if output =~ "ratte" {
expect("ls schrank")
break
}
}
"Ohje, die alle einzeln zu löschen wäre aber viel Arbeit!"
"Für solche Situationen gibt es die sogenannten *Wildcards* (\"Platzhalter\"). Das Sternchen-Zeichen ist eine Abkürzung für eine beliebige Anzahl von Zeichen. Beispielsweise beschreibt `*.txt` alle Dateien, die auf \".txt\" enden. Davor dürfen beliebige andere Zeichen stehen. Lassen Sie sich (mit `ls`) erstmal alle Ratten anzeigen, deren Nummer mit einer 1 beginnt."
prompt {
if output =~ "ratte1" && output =~ "ratte19" && ! output =~ "ratte2" {
expect(`ls schrank/ratte1*`)
break
}
}
"Und nun lassen Sie sich alle Ratten anzeigen, deren Nummer mit einer 2 endet!"
prompt {
if output =~ "ratte2" && output =~ "ratte12" && ! output =~ "ratte20" {
expect(`ls schrank/ratte*2`)
break
}
}
"Das ganze funktioniert so: Wenn Sie in einem Befehl eine *Wildcard* benutzen, prüft die Shell, ob dieses Muster auf eine oder mehrere Dateien passt. Wenn ja, wird das Wort mit der Wildcard durch die entsprechenden Dateien ersetzt und der eingegebene Befehl wird dann mit diesen Argumenten aufgerufen."
"Nun dürfen Sie endlich alle Ratten löschen! ;-)"
prompt {
if ! runs(`ls "$ROOT/schrank"|grep ratte`) {
expect(`rm schrank/ratte*`)
break
}
}
"Die zweite Wildcard ist das* ?*, es steht für genau ein beliebiges Zeichen."
"Wechseln Sie in das Verzeichnis `/bin` und lassen Sie sich alle Dateien auflisten, deren Namen genau aus drei beliebigen Zeichen besteht."
prompt {
if in("/bin") {
expect("cd /bin")
break
}
}
stayin("/bin") {
prompt {
if command =~ ` \?\?\?$` {
expect("echo ???")
break
}
if help {
expect("echo help")
"Der Ausdruck `?` steht für Dateien, deren Name aus genau einem Zeichen besteht. Wie könnte das für genau drei Zeichen funktionieren?"
}
}
"Und alle Dateien, deren zweiter Buchstabe ein* b* ist?"
prompt {
if command =~ ` \?b\*$` {
expect(`ls ?b*`)
break
}
if help {
expect("echo help")
"Das bedeutet ja: Erst ein einzelnes beliebiges Zeichen, dann ein b, dann beliebig viele andere Zeichen."
}
}
"Alle Dateien, die mindestens zwei* a* enthalten?"
prompt {
if command =~ ` \*a\*a\*$` {
expect(`ls *a*a*`)
break
}
if help {
expect("echo help")
"Eine andere Art, das auszudrücken: Dateien, die zwei a's enthalten, während davor, dazwischen und danach beliebige zeichen stehen dürfen."
}
}
}
"Hervorragend! Wenn Sie mögen, probieren Sie noch weitere Beispiele aus."
"Mit `echo fertig` schließen Sie dann die Lektion ab."
prompt {
if ready {
expect("echo fertig")
break
}
}