Sarius
Anmeldungsdatum: 29. April 2016
Beiträge: 13
|
Schönen guten Tag, arbeite derzeit an einem Art "Quiz", ein kleines Script. Kenne mich da schon etwas aus, doch verstehe nicht, wieso derzeit dieser error kommt: | ./quiz.sh: Zeile 30: Syntaxfehler beim unerwarteten Wort `)'
./quiz.sh: Zeile 30: ` "")'
|
Es liegt an fi / esac ... Doch die sind doch richtig gesetzt, oder nicht?? fi nach einer if-Anweisung esac nach case... :-/ Hier das Script: https://pastebin.com/RpW4CcWW danke für Hilfen!! ☺
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17608
Wohnort: Berlin
|
30 Zeilen, ruhig auch 100, ruhig hier in einen Codeblock setzen:
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 | #!/bin/bash
clear
echo willkommen!
read answer
case $answer in
answer1)
if [ -d "/home/" ]; then
clear
dialog --backtitle quiz --yesno "ja oder nein...?" 10 60
answer=${?}
if [ "$answer" -eq "255" ]
then
echo Ok!
exit 255
fi
if [ "$answer" -eq "1" ]
then
echo Na gut...
exit 255
fi
if [ "$answer" -eq "0" ]
then
echo Ok!
fi
fi
"")
esac
exit
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17608
Wohnort: Berlin
|
Casesblöcke mit ;; abschließen.
| case $answer in
answer1)
foo
bar
;;
"")
baz
;;
esac
|
Vielleicht kann man beim letzten Block drauf verzichten - nachlesen oder ausprobieren.
|
Sarius
(Themenstarter)
Anmeldungsdatum: 29. April 2016
Beiträge: 13
|
Oh stimmt, danke! Jetzt habe ich noch folgendes: https://pastebin.com/zFmKmMC4 Wie mache ich, dass wenn Fehler kommt, das gleiche ab Zeile 2 nochmal passiert, also dass man noch eine Chance hat? Derzeit wird das Script einfach beendet... :-/
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17608
Wohnort: Berlin
|
Das mit den Codeblöcken hast Du übersehen? Das ist doch auch für Dich einfacher!
30 Zeilen, ruhig auch 100, ruhig hier in einen Codeblock setzen:
| function foobar {
... return true
... return false
}
foobar || foobar
|
|
Sarius
(Themenstarter)
Anmeldungsdatum: 29. April 2016
Beiträge: 13
|
|
Sarius
(Themenstarter)
Anmeldungsdatum: 29. April 2016
Beiträge: 13
|
|
Sarius
(Themenstarter)
Anmeldungsdatum: 29. April 2016
Beiträge: 13
|
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Was soll das, Deinen Strang zu bumpen ?? Wir haben Dich wiederholt gebeten, Deinen Code in einem Codeblock zu posten damit man mal die Übersicht und Syntax-Highlighting hat. Aber Du bleibst hartnäckig bei Deinem Pastebin, und da steht dann auch noch unvollständiger Schrott drin, den man gar nicht testen kann. Willst Du Deine Frage nicht mal vernünftig, nachvollziehbar stellen, anstatt uns hier anzumachen ? LG, track
|
Sarius
(Themenstarter)
Anmeldungsdatum: 29. April 2016
Beiträge: 13
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | u*|U*)
echo waehle
read answer2
case $answer2 in
*)
if [ -d "/home/$answer2" ]; then
NOW=$(date +"%d-%m-%Y")
if [ -d "/home/$answer2" ]; then
echo "FEHLER!"
else
* * *
|
Ich will dass wenn "FEHLER" kommt das gleiche ab der 2. Zeile nochmal passiert. also dass man nochmal was eingeben kann..
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Nimm Dir doch einfach mal ein Blatt Papier und zeichne Dir die Logik, die Du haben willst, als Flussdiagramm auf. Dann wirst Du sehr schnell sehen, wie Du die Schleifen zusammenstricken musst ... (das ist nämlich der 1. Schritt, bevor Du anfängst zu coden !) LG, track
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13192
|
Sarius schrieb:
[Code]
Die starke Einrückung macht das Lesen schwer. Außerdem ist es kein komplettes Script. Und ein case mit nur einem Zweig mit *) ist sinnlos.
Ich will dass wenn "FEHLER" kommt das gleiche ab der 2. Zeile nochmal passiert. also dass man nochmal was eingeben kann..
Wie track bereits schrieb: poste bitte den echten Code. Vielleicht hilft auch die Lektüre von Richtig fragen.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17608
Wohnort: Berlin
|
Schreib den Code, der evtl. ein zweites Mal ausgeführt werden soll, in eine Funktion:
| function foobar {
... return 0
... return 1
}
|
Ruf diese mit einem Shortcut-Oder auf: Im ganzen Satz: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #!/bin/bash
function foobar {
a=$((RANDOM%2))
echo $a
if (( a > 0 ))
then
echo ok
return 0
else
echo Fehler
return 1
fi
}
foobar || foobar
|
True/false als Rückgabe funktioniert leider nicht. Wenn Du dieses Miniscript mehrmals aufrufst wird es entweder mit
|
./doppelfun.sh
0
Fehler
0
Fehler
|
2x scheitern, oder
einmal gelingen, oder beim 2. Mal erst gelingen: | ./doppelfun.sh
0
Fehler
1
ok
|
|