• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Gelöst Linux if else funktioniert nicht

Hallo zusammen,

ich habe eine ausführbare Textdatei namens skript.sh mit Linux Mint erstellt. Darin wollte ich eine einfache Passwortabfrage implementieren. Der Code sieht so aus:

Code:
#!/bin/bash
read;
if [[ ${REPLY}=='Passwort' ]]; then
  echo 'Das Passwort ist korrekt.'
else
  echo 'Das Passwort ist falsch.'
fi

Wenn ich nun die Datei im Terminal mit ./skript.sh aufrufe, kann ich etwas eingeben. Nur wird jedes Mal 'Das Passwort ist korrekt.' zurückgegeben, egal, was ich eingebe. Das Lesen der Antwort funktioniert, das habe ich getestet. Ich habe mich bereits erfolglos durch viele Foren geschlagen, daher fürchte ich, dass es etwas banales ist, aber ich denke eben oft zu kompliziert ;). Ich würde mich über Hilfe sehr freuen.
 
Zuletzt bearbeitet von einem Moderator:

Igel1954

Member
Da fehlen wohl ein paar Semikolons:

Bash:
#!/bin/bash
read;
if [[ ${REPLY} == 'Passwort' ]]; then
  echo 'Das Passwort ist korrekt.';
else
  echo 'Das Passwort ist falsch.';
fi

So funktioniert es bei mir.
 
Code:
#!/bin/bash
read;
if [[ "${REPLY}" == 'Passwort' ]]; then
  echo 'Das Passwort ist korrekt.'
else
  echo 'Das Passwort ist falsch.'
fi
Also bei mir funktioniert es auch ohne weitere Semikolon, allerdings mit der Variable gequotet.
 

Igel1954

Member
Stimmt, darauf hatte ich gar nicht so geachtet, dass die Variable $REPLAY nicht gequotet ist.
Ich hatte nur schnell mal in einem meiner noch vorhandenen Bücher über Shell-Programmierung nachgeschlagen und gesehen, dass hier die Zeilen mit Semikolon abgeschlossen sind. Hier sind die Variablen in den Beispielen auch immer gequoted. Man wird halt alt. ;)
 
Zuletzt bearbeitet:
Erstaunlich was man alles macht ohne es selbst wahr zu nehmen. Die Leerzeichen werd ich ganz automatisch eingefügt haben ohne überhaupt drüber nachgedacht zu haben.
 
OP
0

007_Special

Newbie
Tatsächlich waren die Leerzeichen vor und nach dem == die Lösung. Dabei hatte ich sie sogar im Code, bevor ich sie gelöscht habe, weil sie auf dem Beispielcode auf einer Webseite nicht da waren und im Gegensatz zu jetzt nicht funktioniert hatten. Seltsam. Aber mir war wie gesagt praktisch klar, dass es etwas Banales sein musste 🙃. Danke jedenfalls euch allen!
 

OsunSeyi

Hacker
Wenn eine Variable in der if-Abfrage nicht gequotet ist, wird's mW immer dann eine Fehlermeldung geben, wenn sie leer ist.
Weil man sie nicht deklarieren *muss*, ist das ja eigentlich ganz praktisch: Ob sie "nur" leer ist oder nicht existiert spielt keine Rolle.
 
Oben