ubuntuusers.de

Problem mit if-Abfrage -> immer der selbe Wert

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

MrPikachu

Anmeldungsdatum:
14. Februar 2013

Beiträge: Zähle...

Guten Abend, ich versuche derzeit mittels eines Unterprogrammes zu ermitteln ob das eingegebene Passwort mit dem aus einem txt File übereinstimmt. Jedoch ändert sich der Returnwert nicht und bleibt immer 0.

 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
#!/bin/sh
anm=cgi-bin/anm.txt

auth()
{

  fpasw=`grep "^$user:" $anm | awk -F: '{ print $2 }'`

  if [ -z "$user" ] || [ -z "$pass" ] ; then 
    return 0
  fi

  if [ "$fpasw" = "$pasw" ]; then
    return 1
  fi
  if [ "$fpasw" != "$pasw" ]; then
    return 0
  fi
}

if [ "$REQUEST_METHOD" = POST ]; then
        read -n $CONTENT_LENGTH query
fi

user=`echo $query | sed -e 's/\&/\n/g' | grep "user=" | awk -F= '{ print $2 }'`
pasw=`echo $query | sed -e 's/\&/\n/g' | grep "pasw=" | awk -F= '{ print $2 }'`


auth; auth1=$?


echo -en "Status: 200 OK\r\n"
echo -en "Content-Type: text/html; charset=UTF-8\r\n\r\n"
echo "<head>"
echo "<title>Anmeldung</title>"
echo "</head>"

echo "<form method=\"post\">"
if [ "$auth1" == "1" ]; then
  echo "<input type=\"submit\" name=\"action\" value=\"OK\">"
  echo "<input type=\"submit\" name=\"action\" value=\"SMS senden\">"
else
  echo "Username:<input type=\"text\" name=\"user\" value=\"$user\"><BR>"
  echo "Password:<input type=\"password\" name=\"pasw\" value=\"\"><BR>"
  echo "<input type=\"submit\" name=\"action\" value=\"Login\"><BR>"  
fi
echo "</form>"

if [ "$auth1" = "1" ]; then
  echo "Das PW ist richtig!<br>"
else
  echo "Das PW ist FALSCH!<br>"
fi

Würde mich freuen, wenn jmd die Lösung meines Problems finden würde oder mir zumindest erklären kann, warums an einer einfachen if Abfrage scheitert.

Mfg

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6497

Tippfehler in Zeile 9:

if [ -z "$user" ] || [ -z "$pass" ] ; then return 0 fi

😉

/edited: Syntax entfernt, weil die Markierung nicht funktionierte.

MrPikachu

(Themenstarter)

Anmeldungsdatum:
14. Februar 2013

Beiträge: 9

Danke, ich war schon am verzweifeln. ☺ Sry ich dachte das wär ein schwerwiegenderes Problem.

Mfg

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6497

Gerne, kein Problem.

Habs zuerst auch nicht gesehen. Dann das Skript zerlegt und Debugging-Zeilen eingebaut (mit echo die Variablen ausgeben lassen). Option set -x ist auch immer hilfreich.

Grundsätzlich frage ich mich, wie geschickt Dein Skript ist. Ist aber eher eine grundsätzliche Geschichte, da können sicher noch andere helfen.

Nur eine Sache möchte ich anmerken: Für die Kommandosubstitution in Zeile 7 würde ich statt

fpasw=`grep "^$user:" $anm | awk -F: '{ print $2 }'`

das hier schreiben

fpasw=$(grep "^$user:" $anm | awk -F: '{ print $2 }')

Ist wesentlich übersichtlicher als die zig verschiedenen Akzent-Zeichen.

MrPikachu

(Themenstarter)

Anmeldungsdatum:
14. Februar 2013

Beiträge: 9

Bin für Verbesserungsvorschläge immer offen. Muss aber dazu sagen, dass ich das Skript vor dem Post gekürzt hab(vorher 246 Zeilen). Häng aber schon wieder an einem anderen Problem. Mal schaun obs diesmal auch so eine einfache Lösung ist. 😉

Antworten |