Ich schreibe gerade mein drittes Shell-Skript und bin auf ein Problem gestoßen. Dies ist mein bisheriges Skript:
#!/bin/bash
echo "choose one of the following options : \
1) display all current users \
2) list all files \
3) show calendar \
4) exit script"
while read
do
case in
1) who;;
2) ls -a;;
3) cal;;
4) exit;;
esac
done
Wenn ich versuche, das Skript auszuführen, heißt es:
line2 : unexpected EOF while looking for matching '"'
line14 : syntax error: unexpected end of file.
Was mache ich falsch?
shell
shell-script
Swifty124
quelle
quelle
Antworten:
Das Problem ist, dass Ihrer
case
Aussage das Thema fehlt - die Variable, die sie auswerten soll. Daher möchten Sie wahrscheinlich so etwas:Hier
case
wird die Standardvariable verwendet,$REPLY
dieread
gefüllt wird, wenn keine Variablennamen angegeben werden (help read
Einzelheiten siehe ).Beachten Sie auch die Änderungen: Wird
printf
verwendet, um die Eingabeaufforderung in jeder Runde anzuzeigen (und keine neue Zeile anzuhängen),cat
wird verwendet, um Anweisungen in mehreren Zeilen zu drucken, damit sie nicht umbrochen werden und leichter zu lesen sind.quelle
Vergessen wir nicht
select
:quelle
Versuchen wir zunächst einen Einzelfall. Ich werde verwenden
read -p
, um die Benutzereingabe in eine Variable zu lesen,opt
gefolgt von einer case-Anweisung wie unten.Das obige Skript funktioniert einwandfrei, und ich glaube, Sie müssen es in einer Schleife haben, damit Sie Benutzereingaben lesen können, bis der Benutzer Option 4 drückt.
Wir könnten es also mit einer
while
Schleife wie unten machen. Ich setze die Variableopt
mit dem Anfangswert auf 0. Jetzt iteriere ich in derwhile
Schleife, solange dieopt
Variable den Wert 0 hat (weshalb ich dieopt
Variable am Ende dercase
Anweisung auf 0 zurücksetze ).quelle
Ich persönlich würde das "while" am Anfang des Codes setzen. Wenn Sie dann mit a folgen
:
, kann es so oft durchlaufen werden, wie Sie möchten. So würde ich es schreiben.dann mach weiter mit den Fragen und beende mit
quelle