Problem mit if-Schleife

L

logout

Grünschnabel
Hi!

Ich bin zu dumm, eine if-Schleife zu bauen, hier ein exemplarischer Auszug. Es soll die Programmversion ermittelt werden und entsprechend soll eine Variable gesetzt werde:


#!/bin/bash
shellvers=$(/bin/bash --version|head -1|cut -c 19-23)

echo "testweise Ausgabe der ermittelten Version:"
echo $shellvers

if [ $shellvers="4.0" ]; then
echo okay
fi

Das mit der Bash-Version ist ein Bsp, ich weiß, dass das auch anders geht, mir geht es nur um die Schleife.

Also, auf den meisten Systemen wird $shellvers 2.0b oder 3.0 ergeben, die if-Bedingung wird trotzdem postiv erfüllt, obwohl $shellvers niemals "4.0" sein kann... warum?

Warum wird diese if-Bedingung positiv erfüllt, obwohl $shellvers niemals den Wert 4.0 hat. wo is das der Fehler?
 
Nun macht's ihm doch nicht so schwer... ;)

Wenn Du if benutzt(was definitiv keine Schleife ist) dan fragst Du
z.B. ob eine Variable einen Wert hat der gleich was auch immer ist.
Das machst Du mit dem Vergleichsoperator ==

Du hast deiner Variablen einen Wert zugewiesen, das machst Du mit =

Wenn Du auf ungleichheit prüfen willst nimmst Du den Negationsoperator
und den Zuweisungsoperator, also !=

MfG
sowatt
 
Nochmal zur Richtigstellung: a="wert" übergibt a den Wert "wert". Der Grund, warum if [ a="wert" ] immer true ist, liegt daran, dass bei fehlerfreier Übergabe der Fehlercode 0 an if zurückgegeben wird, was als true interpretiert wird.

Ist übrigens 'ne gern genommene Prüfungsfrage in UNIX/C: in C ist !0 true, in UNIX 0.

Gruss, Phorus
 

Ähnliche Themen

Problem bei autostart / Ausführung mit meinem SH-Script

Bash - Problem mit verschachtelten Schleifen

Erklärung von if Schleife

Problem mit if in der while Schleife...

Zurück
Oben