Problem mit Stringvergleich in der Shell

geforceeee

PC-Selbstbauer(in)
Hallo zusammen,

ich lese mit einer Shalldatei Dateinamen aus. Diese speichere ich in zwei Variablen ab. Nun möchte ich einen mv - Befehl ausführen, falls diese Dateinamen nicht identisch sind. Das ist der Code.


Code:
FILENAME=`basename $1`                  #save filename

#....

if[$FILENAME != $1] then
        mv -f $FILENAME $1         
fi

Leider funktioniert das nicht. Sobald die Shelldatei ausführe erscheint folgende Fehlermeldung :

if[test != sdf/test]: No such file or directory

"test" ist ein konkreter Dateiname. Warum wird nach einer Datei/Verzeichnis gesucht? Es sollen einfach nur die beiden Strings verglichen werden. Hier wären sie nicht identisch.

Was mache ich falsch?

Vielen Dank
LG, geforceeee
 
Setze mal vor und nach dem [ und ] jeweils ein Leerzeichen. Außerdem würde ich zur Sicherheit $FILENAME und $1 in Quotes setzen, falls in einem Dateinamen oder Parameter ein Leerzeichen auftaucht.
Code:
FILENAME=`basename $1` #save filename
#....
if [ "$FILENAME" != "$1" ] ; then
    mv -f "$FILENAME" "$1"
fi

Analog:
Code:
if [ "test" != "sdf/test" ] ; then
...
 
Die eckige Klammer ([) ist im Linux nur ein Link auf den "test"-Befehl. D.h. damit in der Befehlszeile die Befehle, Optionen und Parameter unterschieden werden können, müssen sie durch (wenigstens) ein Leerzeichen oder anderen "White-Space" getrennt werden.
 
Zurück