# if Abfrage funktioniert nicht



## kalli0 (1. November 2010)

Hallo, eigentlich ein simples Scriptchen, macht aber nicht das, was es soll.
Habe alles Mögliche ausprobiert, finde aber den Fehler nicht. Kann mir jemand helfen?
$ cat compare1
#!/bin/ksh
clear
z1=10 ; echo $z1
z2=12 ; echo $z2

if [ $z1 > $z2 ] ; echo $?
then
        echo "$z1 is greater than $z2"
else
        echo "$z1 is less or equal than $z2"
fi
----------------------------------------------------------
Ausgabe von echo:
10
12
0
10 is greater than 12
-------------------------------------------------------
Was mache ich bloß falsch?


----------



## Bratkartoffel (2. November 2010)

Hi kalli0 und herzlich Willkommen hier bei tutorials.de,

Die Zeichen ">" und "<" haben in der Shell eine andere Bedeutung als du vermutest. Die Zeichen dienen nicht als mathematische Vergleichsoperatoren, sondern als Umleiter von diversen Streams (Standardausgabe, Fehlerausgabe, Standardeingabe usw.).

Für einen Vergleich in dem if musst du dir "[" als Programmaufruf vorstellen, welchem du mit den Argumenten sagen kannst was er tun soll (Genau genommen ist "[" ein Symlink auf "test").

In deinem Fall möchtest du einen "Größer als"-Vergleich machen, im Englischen "*g*reater *t*han". Folgendes sollte funktionieren:

```
if [ $z1 -gt $z2 ]; then
```

Weitere Operatoren findest du in der Manpage von test ("man test").

Gruß
BK


----------



## kalli0 (2. November 2010)

Erstmal Danke für die prompte Antwort. Das war auch nicht meine Idee, sondern wird hier im Rahmen eines Lernprogrammes so publiziert. Was Du meinst kenne ich als redirection of output > oder input <.
Ich hab's probiert und bekomme nun auch einen return code 1. Trotzdem geht es nicht in die else Schleife, sonder gibt brav aus 10 ist greater than twelve ;-(


----------



## Bratkartoffel (2. November 2010)

Hi,

also folgendes funktioniert bei mir einwandfrei:

```
if [ $z1 -gt $z2 ]; then
  echo "$z1 is greater than $z2"
else
  echo "$z1 is less or equal than $z2"
fi
```

// Edit: Ich denke dass das "echo $?" zwischen dem if und dem then das Problem ist 

Gruß
BK


----------



## kalli0 (5. November 2010)

Jo, danke das war's auch ;-)


----------

