If-Bedingung mit diff

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von bobafe, 26.07.2005.

  1. bobafe

    bobafe Jungspund

    Dabei seit:
    22.07.2005
    Beiträge:
    10
    Zustimmungen:
    0
    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.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    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:
     
  4. bobafe

    bobafe Jungspund

    Dabei seit:
    22.07.2005
    Beiträge:
    10
    Zustimmungen:
    0
    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 :(
     
  5. #4 tr0nix, 26.07.2005
    Zuletzt bearbeitet: 26.07.2005
    tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    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.
     
  6. bobafe

    bobafe Jungspund

    Dabei seit:
    22.07.2005
    Beiträge:
    10
    Zustimmungen:
    0
    merci beaucoup
     
  7. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    C'etais pas un problem (ou quelque chose comme ca...)!
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

If-Bedingung mit diff

Die Seite wird geladen...

If-Bedingung mit diff - Ähnliche Themen

  1. php if-Bedingung wird nicht eingehalten

    php if-Bedingung wird nicht eingehalten: Hi, ich schreibe gerade ein php-Script ohne wirklich davon Ahnung zu haben. <?php echo "<table border=\"1\">"; $Zeilen = 1;...
  2. diff in Bezug zu sed setzen

    diff in Bezug zu sed setzen: Hallo liebe Community, ich sitze seit gestern an einem Problem bei dem ihr mir hoffentlich helfen könnt. Meine Aufgabe ist es zwei...
  3. Bash - Zwei Binärdateien vergleichen (SQL Diff)

    Bash - Zwei Binärdateien vergleichen (SQL Diff): Moin, versuche zwei SQL Dumps miteinander zu vergleichen, dazu hole ich Stammdaten aus der MSSQL-DB und speichere sie direkt unter der Bash in...
  4. Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ?

    Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ?: Wie ermittle ich die Differenz zwischen 2 Zahlen unter AIX (Syntax ähnl. wie LINUX) ? Und wenn die Differenz nicht "0" ist, dann folgt Aktion ...
  5. Modulo C++ implementation (Diffie-Hellman-Schlüsselaustausch)

    Modulo C++ implementation (Diffie-Hellman-Schlüsselaustausch): Hi! Also ich hoffe einmal (ich gehe fast davon aus :D ), dass einige Leute hier im Forum den Diffie-Hellman-Schlüsselaustausch kennen. Unser...