Verständnisproblem oder Fehler in bash und ksh?

17/07/2011 - 12:46 von Martin Deppe | Report spam
Hi Liste,

ich bin gerade dabei, mir ein kleines Skript zu schreiben und bin dabei
über ein Verhalten gestolpert, das ich mir nicht erklàren kann und für
falsch halte!

Folgende Situation:
Ich habe 2 Dateien ("ifcfg-eth0-all" und "ifcfg-eth0-base"), die ich als
Original für die Datei "/etc/sysconfig/network/ifcfg-eth0" verwenden will.
Dazu prüfe ich dann durch das folgenden Skript, ob eben diese Datei von
anderer Stelle aus geàndert wurde.
Ich nahm eigentlich an, daß diff "true" (=0) zurück gibt, wenn die
Dateien gleich sind. Dementsprechend müßte dann ein "!" (nicht) vor das
Kommando in der IF-Bedingung.
Dann erhalte ich aber immer: "someone changed the file" (Kopie
entspricht NICHT einer der beiden Originale, ist also keine Kopie).
Die Kopie ist aber tatsàchlich eine Kopie einer der anderen beiden
Dateien und sollte dementsprechend "true" ergeben, was es auch tut.
Damit müßte ich aber den bedingten Ausdruck negieren ("!"), was dann
aber nicht funktioniert.

Hàtte vielleicht jemand eine Idee, wieso?

- Start of Skript
#!/bin/bash
CFGDIR=/etc/sysconfig/network
CFGNAM=ifcfg-eth0
SRCDIR=/root/bin
ALLNAM=ifcfg-eth0-all
BASNAM=ifcfg-eth0-base

# Testausgaben für die einzelnen Teile
diff -q $CFGDIR/$CFGNAM $SRCDIR/$ALLNAM >/dev/null
echo "$ALLNAM: $?"
diff -q $CFGDIR/$CFGNAM $SRCDIR/$BASNAM >/dev/null
echo "$BASNAM: $?"
[ `diff -q $CFGDIR/$CFGNAM $SRCDIR/$BASNAM >/dev/null || diff -q
$CFGDIR/$CFGNAM $SRCDIR/$ALLNAM >/dev/null` ]
echo "[ $? ]"

if [ `diff -q $CFGDIR/$CFGNAM $SRCDIR/$ALLNAM >/dev/null || diff -q
$CFGDIR/$CFGNAM $SRCDIR/$BASNAM >/dev/null` ]
then
echo "$CFGDIR/$CFGNAM: unknwon version - someone changed the file"
exit 1
fi

echo Ok so far
exit 0
- End of Skript

Grüße
Martin
Um die Liste abzubestellen, schicken Sie eine Mail an:
opensuse-de+unsubscribe@opensuse.org
Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken
Sie eine Mail an: opensuse-de+help@opensuse.org
 

Lesen sie die antworten

#1 Rainer Sokoll
17/07/2011 - 13:44 | Warnen spam
Am 17.07.2011 um 12:46 schrieb Martin Deppe:

Ich nahm eigentlich an, daß diff "true" (=0) zurück gibt, wenn die
Dateien gleich sind.



Nein. Ein Progamm sollte(!) immer dann 0 zurückgeben, wenn es sich fehlerlos beendet hat.
Deswegen wird auch diff immer 0 zurückliefern, sofern es erfolgreich beendet wurde.

Rainer--
Um die Liste abzubestellen, schicken Sie eine Mail an:
opensuse-de+
Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken
Sie eine Mail an: opensuse-de+

Ähnliche fragen