If-Bedingung mit diff

B

bobafe

Hallo,

habe da mal wieder ein Problem:

Code:
if test $modus = "diff"
 then
     echo "diff $1 $2 laeuft..."
     tmpdiff=$(diff $1 $2)
     if test $tmpdiff = ""
     then
       echo "DIFF: $2 wurde nicht geaendert." >> $LOGFILE
     else
       echo "DIFF: In $2 wurden folgende Aenderungen vorgenommen:" >> $LOGFILE
       echo $tmpdiff >> $LOGFILE
     fi
Bekomme immer wieder die Fehlermeldung cprtp.sh[6]: <: unknown test operato bei der ich davon ausgehe, dass der Fehler in der o.g. If-Bedingung liegt.

Gibt es einen Weg, das Ergebnis des Diff besser für die if-Bedingung zu nutzen? Z.B. über den Return Code? Wie kriege ich den denn raus?

Gruß,
Andreas.
 
So kannst du mit Returncodes arbeiten:
Code:
a378570@bofh: false
a378570@bofh: echo $?
1
a378570@bofh: true
a378570@bofh: echo $?
0
oder...
Code:
a378570@bofh: if true; then echo blah; fi
blah
a378570@bofh: if false; then echo blah; fi
a378570@bofh:
 
So etwa?
Code:
 tmpdiff=$(diff $1 $2)
  if false;
     then
       echo "DIFF: $2 wurde nicht geaendert." >> $LOGFILE;
     else
       echo "DIFF: In $1 wurden im Vergleich zu $2 folgende Aenderungen vorgenommen." >> $LOGFILE;
       echo $tmpdiff >> $LOGFILE;
     fi
Das liefert mir immer nur das, was im else-Zweig der Bedingung steht... egal, ob die beiden Dateien gleich sind oder nicht :(
 
Code:
a378570@bofh: echo test > test-1
a378570@bofh: echo test > test-2
a378570@bofh: echo diff > diff
a378570@bofh: diff test-1 diff >/dev/null
a378570@bofh: echo $?
1
a378570@bofh: diff test-1 test-2 >/dev/null
a378570@bofh: echo $?
0
Daraus schliesst:
Code:
a378570@bofh: if diff test-1 test-2 >/dev/null; then echo "ist gleich"; else echo "ist unterschiedlich"; fi
ist gleich
a378570@bofh: if diff test-1 diff 2>/dev/null; then echo "ist gleich"; else echo "ist unterschiedlich"; fi
ist unterschiedlich

In schönem Code also:
Code:
#!/bin/bash
LOGFILE=/tmp/testlog
tmpdiff=`diff $1 $2`
if [ "$?" == "0" ]; then
 echo "DIFF: $2 wurde nicht geändert" >> $LOGFILE
else
 echo "DIFF: Folgende Änderungen wurden vorgenommen:" >> $LOGFILE
 echo $tmpdiff >> $LOGFILE
fi

Das Problem ist bei deinem Code das "if false". If funktioniert so, dass es den Returncode des folgenden Programmes interpretiert und bei 0 (true) nach dem "then" weiterverfährt und bei allem anderen (>0, false) erst beim nächsten "else" bzw. "elseif". Da false immer den Returncode 1 hat, arbeitet dein Programm immer gleich.

Wenn du Ausdrücke mit [ ] siehst steht das für das Programm "test" -> man test.
 
Zuletzt bearbeitet:
C'etais pas un problem (ou quelque chose comme ca...)!
 

Ähnliche Themen

HandbrakeCLI Shell Skript

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

verzeichniss suche funktioniert nicht

Queue für copy Script

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Zurück
Oben