if Abfrage funktioniert nicht

kalli0

Grünschnabel
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?
 
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 "greater than". Folgendes sollte funktionieren:
Bash:
if [ $z1 -gt $z2 ]; then

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

Gruß
BK
 
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 ;-(
 
Hi,

also folgendes funktioniert bei mir einwandfrei:
Bash:
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
 

Neue Beiträge

Zurück