|
holzhacker3000
Anmeldungsdatum: Aug. 17, 2012
Beiträge: 30
Wohnort: /home/max
|

17. August 2012 22:09
Ich habe folgendes Problem:
Ich wollte mir mit sh mal aus Langeweile einen Hausaufgabenplaner schreiben.
Also habe ich folgendes Script entwickelt: 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 | #! bin/sh
# Hausaufgabenheft
echo "HAUSAUFGABENHEFT : eintragen oder lesen[e/l] ?"
read d
if [ $d = e ]; then
(
echo "Hausaufgabe :"
read a
echo "In welchem Fach ?"
read b
echo "Zu wann ?"
read c
if [ $c = Montag ]; then
echo $a >> "Montag"
echo $b >> "Montag"
elif [ $c = Dienstag ]; then
echo $a >> "Dienstag"
echo $b >> "Dienstag"
elif [ $c = Mittwoch ]; then
echo $a >> "Mittwoch"
echo $b >> "Mittwoch"
elif [ $c = Donnerstag ]; then
echo $a >> "Donnerstag"
echo $b >> "Donnerstag"
else
echo $a >> "Freitag"
echo $b >> "Freitag"
fi
)
else
echo "Montag" &&
e="$(< "Montag")" &&
echo "Dienstag" &&
f="$(< "Dienstag")" &&
echo "Mittwoch" &&
f="$(< "Mittwoch")" &&
echo "Donnerstag" &&
f="$(< "Donnerstag")" &&
echo "Freitag" &&
f="$(< "Freitag")" &&
fi
|
Ich weiß zwar nicht, ob es so funktioniert wie es soll, aber ich habe Probleme mit dem fi am Ende. Denn das Terminal zeigt ohne dem fi "Syntax error: end of file unexpected (expecting "fi")" an.
Mit dem fi wird jedoch folgendes angezeigt: "Syntax error: "fi" unexpected"
Und da ich ein Anfänger bin, ist hier mein "Latein" zu Ende.
Habe ich etwas falsch gemacht?
Wenn sonst noch Fehler drin sind,dann schreibt es bitte in eure Antwort! Ach ja, die Wochentage sind die Namen der Speicherdateien. Bearbeitet von rklm: Bitte das richtige Syntaxhighlighting benutzen.
|
|
user unknown
Anmeldungsdatum: Aug. 10, 2005
Beiträge: 13796
Wohnort: Berlin
|

17. August 2012 23:52
Du hast eine Frage
und hast sie gestellt
und wartest auf Antwort
und.
|
|
rklm
Moderator & Supporter
Anmeldungsdatum: Okt. 16, 2011
Beiträge: 2039
|

18. August 2012 00:09
user unknown schrieb: Du hast eine Frage
und hast sie gestellt
und wartest auf Antwort
und.
Bingo!  Gute Nacht! robert
|
|
holzhacker3000
(Themenstarter)
Anmeldungsdatum: Aug. 17, 2012
Beiträge: 30
Wohnort: /home/max
|

18. August 2012 11:15
Und was ist jetzt falsch an dem "fi" am Ende?
|
|
holzhacker3000
(Themenstarter)
Anmeldungsdatum: Aug. 17, 2012
Beiträge: 30
Wohnort: /home/max
|

18. August 2012 11:29
Danke, das f="$(< "Freitag")" && war es, oder?
|
|
rklm
Moderator & Supporter
Anmeldungsdatum: Okt. 16, 2011
Beiträge: 2039
|

18. August 2012 12:08
holzhacker3000 schrieb: Danke, das f="$(< "Freitag")" && war es, oder?
Bingo!  robert
|
|
track
Anmeldungsdatum: Juni 26, 2008
Beiträge: 4725
Wohnort: Wolfen (S-A)
|

18. August 2012 12:36
Hi holzhacker3000, erstmal noch willkommen hier auf dem Forum ! Kannst Du mir erklären, warum Du die Klammern in Zeile 7 / 33 eingefügt hast ? .. und warum Du hinter den echos und den Variablenzuweisungen ab Zeile 35 die "&&" anhängst ? (die sind doch eigentlich dazu da, dass der Befehl danach nur ausgeführt wird, wenn der davor keinen Fehler wirft) track
|
|
user unknown
Anmeldungsdatum: Aug. 10, 2005
Beiträge: 13796
Wohnort: Berlin
|

18. August 2012 18:44
track schrieb:
(die sind doch eigentlich dazu da, dass der Befehl danach nur ausgeführt wird, wenn der davor keinen Fehler wirft)
... keinen Fehler zurückgibt. Fehler werfen ist was anderes, ein Unterbrechen des Programmablaufs.
|
|
holzhacker3000
(Themenstarter)
Anmeldungsdatum: Aug. 17, 2012
Beiträge: 30
Wohnort: /home/max
|

18. August 2012 20:05
Naja, des Überblicks wegen. Weil eben irgendwas falsch war und ich es wissen wollte, habe ich ein bisschen gegliedert...
Aber es fuktioniert doch alles, oder?
Jetzt muss ich es nur noch mal neu in Java schreiben... Ach ja das war Copy Paste.
|
|
track
Anmeldungsdatum: Juni 26, 2008
Beiträge: 4725
Wohnort: Wolfen (S-A)
|

18. August 2012 20:49
Zum Gliedern nimmt man ja eigentlich Einrückungen und Kommentare, nicht wahr ...? Wenn man einfach irgendwelche Befehle wegen ihrer optischen Schönheit verwendet, riskiert man doch so einiges an Nebenwirkungen ... (Die Klammern z.B. starten eine Untershell und die "&&" bewirken die besagte Befehlsverknüpfung) LG, track
|
|
Lysander
Anmeldungsdatum: Juli 30, 2008
Beiträge: 2296
Wohnort: Clausthal
|

19. August 2012 00:04
Ich erkenne da noch einige konzeptionelle Schwächen:
Da fehlt es imho noch an Struktur...
|
|
holzhacker3000
(Themenstarter)
Anmeldungsdatum: Aug. 17, 2012
Beiträge: 30
Wohnort: /home/max
|

20. August 2012 22:00
Hier ist meine neue Version (für das ganze Jahr):
Das Datum wird angegeben und in einer Datei gespeichert, sowie auch das Fach und die Aufgabe.
Mit grep kann man die folgenden Tage, bestimmte Hausaufgaben oder Hausaufgaben in einem Fach suchen.
Voraussetzung ist natürlich: keine Tippfehler #! bin/sh
# Hausaufgabenheft
echo ""
echo ""
echo "----------Hausaufgabenplaner----------"
echo "HAUSAUFGABENHEFT : eintragen, lesen oder löschen für die nächste Woche?[e/l/d] ?"
read d
if [ $d = e ]; then
(
echo "Hausaufgabe :"
read a
echo "In welchem Fach ?"
read b
echo "Zu wann ?"
read c
echo $c: $b: $a: >> ~/Dokumente/Scripts/Hausaufgabe
)
elif [ $d = l ]; then
(
echo "Suche nach Datum, Fach oder Hausaufgabe :"
read e
echo ""
echo "Ergebnisse :"
echo ""
grep -i "$e" ~/Dokumente/Scripts/Hausaufgabe
)
else
(
rm -f ~/Dokumente/Scripts/Hausaufgabe
touch ~/Dokumente/Scripts/Hausaufgabe
)
fi
echo "----------Hausaufgabenplaner----------"
echo ""
echo ""Alles funktioniert so, wie ich es will. Ich möchte das jetzt über Eclipse und Java auf mein Android Smartphone bringen, aber ich habe davon nahezu keine Ahnung und alles, was ich mache, funktioniert nicht. Kann mir da jemand helfen?
Alles, was ich bis jetzt habe,steht im Anhang. Oder soll ich lieber ein neues Forum auf machen?
- HausaufgabenPlaner.java (0.0 KiB)
- HausaufgabenPlaner.java herunterladen
|
|
rklm
Moderator & Supporter
Anmeldungsdatum: Okt. 16, 2011
Beiträge: 2039
|

21. August 2012 08:25
holzhacker3000 schrieb: Hier ist meine neue Version (für das ganze Jahr):
Das Datum wird angegeben und in einer Datei gespeichert, sowie auch das Fach und die Aufgabe.
Mit grep kann man die folgenden Tage, bestimmte Hausaufgaben oder Hausaufgaben in einem Fach suchen.
Voraussetzung ist natürlich: keine Tippfehler #! bin/sh
# Hausaufgabenheft
...
Bitte nutze das Hightlighting für Shell-Syntax. Das macht anderen das Lesen wirklich leichter. Noch ein paar Anmerkungen zu dem Skript: Nutze ruhig das reichhaltige Angebot, das das Alphabet zur Verfügung stellt und baue längere Variablennamen, denen man ansieht, um was es sich handelt. Die richtige Benennung von Variablen, Funktionen etc. trägt erheblich zur Lesbarkeit und Wartbarkeit von Programmen bei. So, wie Du das machst, solltest Du die Variablen bei den Ausgaben und die Variable d in den if-Abfragen quoten. Aber, im Fall d: Noch besser ist case geeignet für solche Fallunterscheidungen. Es gibt read -p prompt, so dass Du keinen extra echo in der Zeile davor benötigst. Wenn Du keine regulären Ausdrücke als Suchmuster nutzen willst (was ich jetzt einfach mal vermute), dann bist Du mit fgrep besser bedient als mit grep, weil das das Suchmuster nicht als regulären Ausdruck interpretiert. Die Subshells (innerhalb der runden Klammern) sind hier völlig überflüssig und kosten Dich nur eine Prozesserzeugung, die nichts bringt. In Skripten würde ich $HOME anstatt ~ benutzen, weil das einfach kompatibler zu einer größeren Anzahl Shells ist.
Alles funktioniert so, wie ich es will.
Fein!
Ich möchte das jetzt über Eclipse und Java auf mein Android Smartphone bringen, aber ich habe davon nahezu keine Ahnung und alles, was ich mache, funktioniert nicht. Kann mir da jemand helfen?
Alles, was ich bis jetzt habe,steht im Anhang. Oder soll ich lieber ein neues Forum auf machen?
Du kannst kein neues Forum aufmachen - das können nur unsere Admins. Es reicht aber auch, wenn Du einfach einen neuen Thread eröffnest, denn das ist ja ein neues Thema.  Viele Grüße robert
|
|
holzhacker3000
(Themenstarter)
Anmeldungsdatum: Aug. 17, 2012
Beiträge: 30
Wohnort: /home/max
|

21. August 2012 14:44
Sorry, aber das meinte ich...
|
|
holzhacker3000
(Themenstarter)
Anmeldungsdatum: Aug. 17, 2012
Beiträge: 30
Wohnort: /home/max
|

22. Januar 2013 16:01
So, ich hab das Alte mal wieder aufgegriffen und habe jetzt das: 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 | #! bin/sh
# Hausaufgabenheft
while true
do
echo ""
echo ""
echo "----------Hausaufgabenplaner----------"
echo "HAUSAUFGABENHEFT : eintragen, lesen, löschen oder beenden ? [w/r/d/x]"
read d
if [ $d = w ]; then
(
echo "Hausaufgabe :"
read a
echo "In welchem Fach ?"
read b
echo "Zu wann ?"
read c
echo $c: $b: $a >> ~/Dokumente/Shell/Hausaufgabe
)
elif [ $d = r ]; then
(
echo "Suche nach Datum, Fach oder Hausaufgabe :"
read e
echo ""
echo "Ergebnisse :"
echo ""
grep -i "$e" ~/Dokumente/Shell/Hausaufgabe
)
elif [ $d = d ]; then
echo "Alles löschen ? [j/n]"
read f
if [ $f = j ]; then
rm -f ~/Dokumente/Shell/Hausaufgabe
touch ~/Dokumente/Shell/Hausaufgabe
else echo "----------Hausaufgabenplaner----------"
echo ""
echo ""
fi
elif [ $d = x ]; then
echo "Hausaufgabenplaner beenden ? [j/n]"
read -a -n 1 g
if [ $g = j ]; then
echo "----------Hausaufgabenplaner----------"
echo ""
echo ""
exit
fi
fi
echo "----------Hausaufgabenplaner----------"
echo ""
echo ""
done
|
Und jetzt habe ich folgendes Problem: Ich möchte die Eingabe zum Beenden mit Zeile 51 unsichtbar machen und ohne return bestätigen. Aber jetzt erhalte ich folgende Fehlermeldung: '''HA-Heft: 51: read: Illegal option -a
HA-Heft: 53: [: =: unexpected operator'''
|